分层(Laying)是软件开发者用来将复杂的软件系统分解的最常用的方法。
当你使用“层”(Lay)这个术语考虑一个系统时,你可以把软件中的主要子系统的组织方式想象为多层蛋糕,每一层都位于低层之上。在这个方案中,高层使用低层中定义的各种服务,但低层却意识不到高层的存在。更进一步地,每一层通常都会对其低层隐藏在其上的层,因此,层4使用层3提供的服务,而层3使用层2提供的服务,但是层4不知道层2的存在。
将系统分解为不同的层有很多益处:
- 你可以将单独的一层理解为一个整体,而不用过多的了解其它层的细节。
- 你可以用实现相同基本服务的替代品来替代这些层。
- 你可以减少层之间的依赖性。
- 层可以更好的实现标准化。
- 一旦你创建了一层,你就可以在许多更高级的服务中使用它。
分层是一项很重要的技术,但是也有不足:
- 层封装了部分功能,但并不能很好地封装所有功能。因此,你有时必须修改多个层。这个缺点的经典案例就是在一个分层的企业应用程序中加入一个需要在UI上显示的字段,则必须修改数据库,并且修改位于UI和数据库间的每一层。
- 额外的层会影响性能。在每一层数据通常需要从一层传递到另一层。但是,对于某一功能的封装通常会给你带来更高的效率以弥补损失的性能。我们可以通过优化控制事务的层,而加快事务的处理。
分层架构最难的部分是决定应该拥有哪些层和这些层的职责。