知识卡片

三层架构诞生是为了给领域逻辑找一个安身之处

普通读书笔记卡

内容

早期批处理系统直接操作特定文件格式(如ISAM、VSAM),没有分层概念,也不需要。20世纪90年代客户/服务器两层架构兴起,胖客户端工具(VB、PowerBuilder、Delphi)擅长把控件拖拽绑定到关系数据库,处理简单的数据展示和修改很顺手;但一旦出现领域逻辑(业务规则、验证、计算),要么塞进客户端——导致逻辑和界面耦合、跨界面的重复代码难以维护,要么塞进数据库存储过程——导致丧失SQL标准带来的数据库厂商可移植性。两条路都走不通,这才是三层架构(表现层/领域层/数据源层)真正被需要的原因:把领域逻辑从两端拽出来单独建模。Web的兴起进一步验证了这个分离的价值:分层良好的系统只需新增一个表现层就能把服务搬上Web,而把领域逻辑写死在胖客户端里的系统则必须整体重写才能上线。可迁移启发:判断要不要为某种逻辑单独抽出一层,看的不是”理论上是否更优雅”,而是”这块逻辑当前有没有无处安放,导致了重复代码或不必要的耦合”。

参考来源

- 位置:《企业应用架构模式》第一部分"表述"之"第1章 分层"之"1.1 企业应用中层次的演化"(源文件:_epub-src/OEBPS/Text/000012.html) - 结论依据:原文说明客户/服务器方式下领域逻辑"通常,人们会把它们写在客户端,但是这样很笨拙……容易产生冗余代码",或"把这些领域逻辑放到数据库端,作为存储过程。但是……普通用户被剥夺了这种选择权",随后指出"面向对象为领域逻辑的问题找到了答案:转到三层架构的系统",以及Web兴起后"对于设计良好的三层系统来说,只需要增加一个新的表现层,就可以了",直接支撑本卡结论。 - 原始内容:面向对象为领域逻辑的问题找到了答案:转到三层架构的系统。在这种方式下,在表现层实现用户界面,在领域层实现领域逻辑,在数据源层存取数据……对于设计良好的三层系统来说,只需要增加一个新的表现层,就可以了。