在分解复杂的软件系统时,架构师和程序员用得最多的技术之一就是分层。个人学习开发的时候,软件系统大多数是三层架构,也就是大家非常熟悉的表现层、领域层(业务层)、数据源层。随着互联网的发展,智能手机普及手机应用越来越多,原本PC端的系统要开始往移动端应用转,那不能从头到尾再开发一套,而后就开始有了微服务架构,然而微服务离不开领域驱动设计,现在大多数开始使用上了四层架构,基础层、用户接口层、应用层、领域层(业务层)。
今天分享内容是软件系统的分层,如何降低层与层之间的依赖。
01 分层的好处与弊端
《企业应用架构模式》里面这样讲到:“当用分层的观点来考虑系统时,可以将各个子系统想像成按照 “多层蛋糕” 的形状来组织,每一层都依托在其下层之上。在这种组织方式下,上层使用了下层定义的各种服务,而下层对上层一无所知。另外,每一层对自己的上层隐藏其下层的细节。因此,第4层使用第3层的服务,第3层使用第2层的服务,第4层无需知道第2层的细节。”
系统分层的好处也非常明显:
· 可以替换某一层的具体实现,只要前后提供的服务相同即可。比如,领域驱动设计中的基础设施层,或者三层架构中的数据源层,我们可以任意的替换,不用考虑底层是数据库,你用的是 hibernate,还是mybatis,或者其它的语言的实现。
· 无需过多了解其他层次,比如,无需知道数据源层和资源库层存储的细节,你只需要告诉它存什么即可。
缺陷:
· 层次并不能封装所有的东西。有时它会为我们带来级联的修改。最经典的例子就