分层解耦是最常见也被认为是最入门级的架构能力。看似简单,实质具有非常深刻的内涵。
分层的实质是隔离关注点。依据是软件不同部分具有高度一致的本质。比如WEB开发常见的前端、后端分离,就是建立在前后端具有不同的关注点前提上。前端关注不同的渠道灵活快速支持和用户体验,后端关注服务的沉淀、稳定可靠以及性能容量。<br>当前比较常见的分层还有将领域和应用进行分层,从而获得一个比较稳定的领域能力层,这个是DDD的基本主张,也是当前各种领域PaaS存在的理论参照系。
解耦的实质是分离变化点,这是一种适合不同粒度、不同层次的变化点分离架构方法。大到上面的分层,小到一个功能内的两个实现类,都可以找到解耦方法的影子。
分层与解耦最容易被忽略的是只有分和解,没有合。因为软件系统作为一个整体而言,用户对其完成一系列业务case的完整性并没有随着解耦而消失,同时这才是软件产品的根本任务。而解耦只是软件研发组织的内部诉求,不是用户诉求。所以解了以后还要合。“合”比“解”的难度更大。解的同时要考虑合,合要基于解的结果。因此没有先后顺序,要同时考虑解耦与合并才能真正完成“解耦”。
分层是解耦的特例,是完成系统level0的解耦。就企业IT软件看,是完成用户界面、业务逻辑/应用、数据存储几大类IT任务的解耦。围绕着分层有一系列的“合”解决方案的现成实例,如sevlet规范解决界面与业务逻辑的合,jdbc解决业务逻辑与数据存储的合,各类中间件sdk解决业务应用与中间件服务的合。
因此,分层解耦是IT架构最基本也是最有内涵的架构方法。