你怎么结构你可重复使用的图书馆?
-
12-09-2019 - |
题
你怎么组织代码,以便它可以很容易地被移植跨业务项目没有携带有不必要的膨胀?
例如(。净额),让我们说你已经下命名空间:
namespace Computers
- Hardware
- Motherboard
- GPU
namespace Monitors
- Display
- Mirrors
namespace Peripherals
- USB
- PS/2
- 你创建的一个项目每父命名空间和随后的参考的项目dll在其他项目吗?
- 你创建的一个大类库和港口的那个东西周围(即使你只需要5%的图书馆)?
- 或者,你只是创建一个文件和代码复制你需要到该文件;身背该文件进入周围的所有项目,需要实现一个"插"结构(作为糟糕,因为这似乎)?
编辑: 我不是在寻找。净具体的答案,但是它是具体的例子,我用(因为一个抽象的实例会使它难以理解的问题在这个实例)
解决方案
你创建的一个项目每父 名字空间和随后的参考, 项目dll在其他项目吗?
不一定。这通常结束这种方式,因为我的图书馆通常都不是很大但你会注意到Microsoft肯定不会这样做。系统。网络的存在,甚至如果你不包括的系统。网络的参考。你只是得到更多类别,如果你这样做。指示系统。Web namespace被用在几种不同的Dll。
你创建的一个大类库 和港口的那个东西周围(即使 你只需要5%的图书馆)?
是的。硬盘空间的便宜、更便宜的,比维持冗余的代码。
或者,你只是创建一个文件, 代码复制你需要到该文件;身背该文件进入周围所有的 项目需要实现一个 "即插即用"结构(如不好的 因为这似乎)?
它取决于功能。我通常的地方这样的事情在一段。例如,典型功能,显示了在我的网项目是这样的:
void ShowErrorMessage(HtmlTableRow row, string message)
{
row.Cells.Clear();
row.Cells.Add(new HtmlTableCell());
row.Cells[0].InnerHtml = message;
row.Cells.Attributes.Add("class", "error");
row.Visible = true;
}
它永远不会似乎是一个很好的候选人库的功能,因为那我就必须通过在CSS类我想用和偶尔的colspan值为的单元。但是你会看到某种形式的执行情况这样坐在一些地方,在我的网的项目。
其他提示
我把我的提示从DNA和复制所有或部分的我的一个巨大的类图书馆的项目,甚至如果我只用1%的图书馆中的任何一个项目。我自由的改写方法和类需要。
虽然这种做法有悖于传统的编程的智慧,我不会把它:它的工作非常成功地为生活的事情的最后一个3.5亿年。作为的生活,替代性(水泥的接口和实现通过分享编译程序集中在项目),抑制了改变和实际上的保障,最终的灭绝。
我已经找到了最近,我尽量保持项目的数目下,如果仅使数的实际集会创建最终是减少-我只要找到处理更容易在发展。这可能是因为我感到难以创建项目,是真正的模块化和彼此独立的。
我猜一般规则可能是:如果项目真的可以独立开发的所有其他人和插在其他项目没有任何其他依赖关系,然后使它对其自己的项目。如果你发现总有其他的项目,需要加以引用,以便为它的工作(例如,也许是在你的监控项目发现,没有在所有会工作除非你还包括计算机名称空间与GPU课程),然后我会把它们放在一起在一个项目。
除此之外,我不认为该规则过于硬性的.真的取决于很多关于什么是在大会,这是很难做出任意性的规则...
只是我两分钱,不值得很多...
我开始用一个单一的问题,因为它变得更大,并开始包含一些相当独立的部件,我可以选择将它们作为单独的dll。对我来说,这是主要问题的美学-我喜欢让事情变得独立和正交和组织良好。没有什么是错误一个大问题,鉴于数量的存储器,磁盘空间的可用现在。
对于东西,共在多个项目中我通常去的一个大DLL的方法。这是擦不过,如果你拥有许多项目采用这个家伙,我强烈推荐强命名它和投入的建议。什么你最终会遇到如你所增加更多的和更多的项目是希望做出重大更改,以一个共享的组成部分。如果你不使用强命名/咨询委员会然后你必须去和更新每个应用程序时进行更改,并且不可避免地你会忘记一个,并在生产爆炸。
强烈的名字,保持一个版本中的一个集中的文件夹源的控制,并始终参考。然后就部署它丢在的建议。