浅析C#分层

        最近又开始分层工作,今天和老师聊天之后,有几个问题感觉特别的有深度,特别值得思考一下。

        首先第一个问题:为什么要分层

        我们在接触机房重构的时候就开始接触分层,但是还没有仔细的琢磨过为什么要分层?分层的意义在什么地方呢?首先在前面的一些很小的项目开发中,诸如:学生信息管理系统、VB版的机房等项目都是一个独立开发的,一个人负责逻辑和外观设计,但是在后面的软件开发过程中,基本上都是以团队的形式进行软件的开发,小至几人几十人,大到几百人甚至更多人的开发,而分层的就是为了方便团队的分工和办公,每个人都各司其职,从而达到高效率的工作。

        其次,规范代码:在开发过程中可以将每层的代码进行规范,固定开发语言的风格;
        最后,忽略数据库差异:好的数据访问层可以将数据库的差异完全屏蔽,对开发人员只是做相同的数据操作工作,甚至可以快速进行数据库转换(可以运用设计模式进行);

        当然了,分层实现了高内聚低耦合

        高内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。在OOP思想中,高内聚更加趋向于接口化。在调用方法的时候,只需通过相应的接口,就可以得到不同的实现,而无需修改对应类的内容及实现方式。在模块划分时,要遵循“一个模块,一个功能”的原则,尽可能使模块达到功能内聚。

        低耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越高,牵一发而动全身。在模块之间的调用过程中,做到A调用B的时候可以在不导入或者不知道B存在的情况下,直接调用B来实现模块之间的相互调用。一个完整的系统,模块与模块之间,尽可能的使其独立存在。让每一个模块尽可能独立完成某个特定的子功能。模块之间的接口应该尽量少而简单

         内聚和耦合又分多种……

        参考链接:https://www.cnblogs.com/Freedom0221/p/12596161.html

            为什么分层的时候是新建了一个项目而不是利用新建文件夹来分层?

       这其实也是一个很简单的问题。在新建项目的时候回自动生成一个dll文件。何为dll文件呢?DLL是Dynamic Link Library的缩写,以为动态链接库。是一个包含多个程序,同时使用的代码和数据的库。通过使用DLL程序可以实现模块化,由相对独立的组件组成。例如,一个计帐程序可以按模块来销售。可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。

        DLL文件的优势

         1)扩展应用程序

         当程序进行更改某些操作的时候,可以很容易的将更新应用到各个模块,而不会影响程序的其他部分,只需要更新一下DLL文件即可,而无需重新生成或安装整个程序。比如QQ的视频功能需要升级,那么负责编写QQ的程序员不必将QQ所有代码都重写,只需将视频功能相关的DLL文件重写即可。

       2)便于程序员合作

  这个和最终用户关系不大,仅供了解。大家都知道编程工具有很多,比如VB、VC、Delphi等,如果好几个人合作来编写一个大的程序,那么可能有的人用VB,有的人用VC,每人负责的部分所使用的编程语言都不同,究竟放在哪个编译器中进行编译呢?这就好比一群来自各个国家的人在共同编写一篇文章,如果他们所使用的语言都不同,写出来的文章怎么可能凑到一起呢?而有了DLL后,可以让VC程序员写一个DLL,然后VB程序员在程序中调用,无需为怎么将它们都编译为一个单独的EXE而发愁了。

  3)节省内存

  如果多个应用程序调用的是同一个动态链接库,那么这个DLL文件不会被重复多次装入内存中,而是由这些应用程序共享同一个已载入内存的DLL。就好比一个办公室中,很少会为每一个员工配置一台饮水机的,而是在一个公共位置放上一个饮水机,所有需要喝水的职员都可以共用这台饮水机,降低了成本又节约了空间。

  4)共享程序资源

  包括刚才提到过的通用文件对话框在内,DLL文件提供了应用程序间共享资源的可能。资源可以是程序对话框、字符串、图标,或者声音文件等。

  5)解决应用程序本地化问题

  在下载了某个程序的汉化包后,打开汉化说明,经常可以看到用下载包中的DLL文件覆盖掉程序原来的DLL,汉化就完成了。这些程序都是将执行代码和应用程序界面分开编写了,所以汉化者只需简单地将其中和程序界面相关的DLL汉化并发布即可。

          关于DLL依赖问题:当某个程序或DLL使用其他的DLL中的DLL函数的时候,就会创建依赖项,这样程序就不在是独立的了,如果依赖项被损坏或者没有引用依赖项,那程序运行的时候就会遇到问题。

         而文件夹进行分层并不能为我们提供这么多的文件等功能强大的东西,文件夹分层只能将源文件进行物理上的分层,当时对于新建项目类库进行分层优势较小,而且不是很方便。

参考链接:

https://baike.baidu.com/item/.dll/2133451?fr=aladdin

https://blog.csdn.net/weixin_38752101/article/details/80312303

https://blog.csdn.net/weixin_38752101/article/details/80312496

http://blog.sina.com.cn/s/blog_5365256a0100ar9j.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章