经过了一个上午的讨论,对于UML的包图(系统架构图)又有了更深一层的理解。 第一个图: 简单解释:UI:界面层,BLL:业务逻辑层:DAL:数据处理层。FUN:封装了常用业务逻辑。 此图不合理原因: 1、分层的原则:根据职责分层。FUN是对常用的业务逻辑的封装,实际上也就还是BLL的部分,因此不需要将其分离出去。 2、解耦的原则:分层是为了解耦,FUN若是需要将BLL和DAL解耦,那么BLL与DAL之间的引用关系就不该存在,否则,FUN将BLL与DAL解耦了,但是BLL与DAL的耦合性依然存在,实际上没有起到作用。
从原则上讲,此图可以改为(第二个图): 简单解释: FUN和BLL同是处理业务逻辑,只是处理的业务逻辑类型不一样,那么他们之间并没有关联,将二者分为两个包可行。此时,包图从原则上讲得过。还可以: 第三个图: 若从第一个图中的出发点看,FUN和BLL之间是存在调用关系的。那么,第一个图还有一个问题:
3、对于分层与分类概念混淆:包图(或程序集)是为了分层,也就是为了解耦,在代码中的体现是程序集之间的引用关系,而分类则是将某一些功能相似或相同的方法封装成类,如图一中,FUN是为了封装一些常用的业务逻辑,而FUN中的类又是为BLL调用,若是分开为两个程序集,则BLL其他的各类对于FUN中的各类的调用反而更复杂。若是改为符合原则也符合实际开发应用,则应该将FUN并到BLL中,不列为单独一个包,也就是说BLL其他类调用FUN中的类是BLL层中的类调用关系,即FUN只是BLL中的一个分类,而不应该是系统的一个分层。
第四个图(左为包图,右为BLL层中的文件夹) 或者: 第五个图: |
|