企业架构应用模式笔记--第一章(分层)
时间:2011-06-09 来源:萧然
在分解复杂的软件系统时,软件设计者用得最多的技术之一就是分层。
将系统分层的好处:
1.在无需过多了解其他层次的情况下,可以将某一层作为一个有机整体来理解。
如:我们可以在无需了解以太网的工作细节,可以照样在TCP上构建FTP服务。
2.可以替换某层的具体实现,只要前后提供的服务相同即可。(不是很理解是什么意思)
我的理解就是:一个服务层在很多地方都被调用,而服务层已经封装了逻辑层的具体实现。那么当逻辑层的内部逻辑改变的时候,在调用的地方不用去关心起内部逻辑的改变。
3.可以将层次间的依赖性降到最低。
当分层来考虑系统的时候,每一层依托在其下层之上。上层使用了下层定义的服务,而下层对上层一无所知。而每一层对与自己的上层,隐藏其下层的细节。
4.分层有利于标准化工作。
5.一旦构建好了某一层,就可以为其他很多上层服务提供支持。
我的理解是:如Model层可以同时为逻辑层、服务层、UI层提供服务,但是这样似乎又增强了层与层之间的耦合性。能不能再加一层来取代model层直接与上层交接。这样在model层变化的时候,而又和页面展示没有直接关系的时候,我们就不需要去改变UI层。比如一个字段score的类型double类型,由于需求改变,要求变为bool类型,而如果存在一层专门提供了只读string类型的score,那么UI层就不需要去关系score的类型了。
分层的缺点:
1.层次并不能封装所有的东西,有时会带来级联的修改。
2.过多的层次会影响性能。
分层架构中最困难的问题是决定建立哪些层次以及每一层的职责是什么。
关于三层架构:
1.表现层--实现用户界面:
提供服务,显示信息(如在windows或html页面中,处理用户请求(鼠标点击,键盘敲击等),HTTP请求,命令行调用,批处理)
2.领域层--实现业务逻辑
逻辑,系统的真正核心。
3.数据层--存储数据
与数据库,消息系统,事务管理器及其他的软件包通信。
这样的分层的优点是可以将复杂的领域逻辑从界面代码中抽取出来,单独放在中间层,用对象加以建模和组织。如MVC
与分层相关的两个词汇
1.layer--使用时强调的是无需吧不同的层次放在不同的计算机上运行。独立出来的领域逻辑层,既可以运行在台式计算机上,也可以运行在服务器上。
2.tier--很多人认为是物理上的分离。
关于分层的非对称性:
需要明确区分为别人提供服务的接口和使用别人服务的接口,这也是表现层和数据层相对核心的本质区别。
表现层是系统对外提供的接口,不管外面是复杂的人类还是简单的远端程序。
数据层是系统使用外部服务的接口。
一条普遍的依赖原则:
领域层和数据层绝对不要依赖于表现层。