当前位置: 移动技术网 > IT编程>开发语言>.net > 如何在编程实践中划分程序集?

如何在编程实践中划分程序集?

2019年04月19日  | 移动技术网IT编程  | 我要评论

鬼谷子下山的故事,哪个牌子的散粉好用,homeplus

本文将讨论的程序设计语言是.net语言,至少对于c#成立。本文不详述命名空间和程序集的差别,而是讨论如何在实践中应用这些差别。本文侧重于程序集方面,命名空间的划分今后有时间再谈。


在.net语言中,至少包括c#,命名空间和程序集(扩展名为dll,在visual studio上表现为一个项目)是相互独立的。一个程序集可以包括多个命名空间,一个命名空间可以分散在多个程序集中。这几乎是广为人知且教科书式的解答。但到了具体编程的时候,有的人还是不懂什么时候要新建一个项目,新项目的命名空间和老项目要有什么关系。

划分程序集是面向对象设计理念及设计模式的更高一级应用。
基本原则

程序集的基本用途就是通过增加文件数目来减少单个文件的体积——一种权衡。将程序的功能分散在多个程序集中,允许程序更新时只需要更新的程序集就够了。

原则1封装变化:把倾向于变化的程序逻辑放到一个程序集中。

再进一步,如果完成同一件事有不同的做法,这些做法又足够复杂够得上程序集的级别,那么建一个接口,每个做法都建成一个独立的程序集,实现此接口。

原则2接口与实现分离:把能相互替代的逻辑每个逻辑做成一个程序集。

例子

我以前做过整理输入法用户词库的软件。它读入词库,删除低频词,保存。删除低频词的逻辑是固定的,而读写逻辑因不同的文件格式而改变。(我相信谷歌输入法、搜狗输入法、紫光拼音等都有不同的用户词库格式。)

所以,新建一个项目,只定义一个接口,此即为程序集interface。

新建一个项目,实现接口,以读写谷歌输入法词库,此为googlereader。

新建一个项目,实现接口,以读写搜狗输入法词库,此为dogreader。

发布了此词库整理软件后,如果用户说他想整理qq输入法的词库,你只需再写一个dll,发在网上就是了。


如果一个逻辑要被多个解决方案(不论它们是否相关)使用,此逻辑又足够复杂够得上程序集的级别,那就把它写成一个程序集。

一开始的时候不可能突然有需求说a、b、c三个软件都需要某个东西,问你怎么办。肯定是先写a,全部完成了。隔了一段时间,写b,“诶,好像这些代码我以前写过啊”,动找西找原来在a程序里,“干脆复制过来吧!”又隔了一段时间,写c,“诶,这个问题我以前碰到过啊”,“原来a、b都为了解决此问题写过代码,干脆提取成一个程序集,a、b、c都引用它吧!”

或者你想在网上共享代码,而不像共享整个应用程序,那如果可行的话,不如就把这些代码抽成一个项目,打包让人家下载。别人下下来直接导入自己的项目就可以用。

原则3独立原则:把被多处依赖,而自己不依赖它人的逻辑提取为一个程序集。

如果你在写代码很多的程序时,记得划分程序集。我是如果一个exe大于500kb,我就想办法把它一部分逻辑抽出到新的程序集里去。否则修改了这个exe的一句代码,重新编译就要编译全部,写500kb。

如果程序集划分出去,修改了这个exe的一句代码,重新编译可能只需编译300kb。同样,你修改了新程序集的一句代码(如果不影响它的外观),编译它时卸载exe项目,那么只会编译200kb。节省时间节省空间。

原则4精简原则:太大的exe或dll考虑再细分。

原则5不变原则:不易变化的逻辑分离为一个程序集。这是原则1的对应。

 作者:gqqnb

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网