知识卡片
非对称分层视图与六边形架构对称视图的差异
内容
Alistair Cockburn的六边形架构(Hexagonal Architecture)把任何系统都看成一个被”到外部系统的接口”包围的核心——无论调用方是人类用户还是另一个远端程序,在这个模型里地位对等,因此是一种对称视图。本书采用的分层视图则刻意不对称:表现层与数据源层虽然都是”系统与外界的接口”,但语义方向完全相反——表现层是系统对外提供服务的接口(不管外面是人还是简单的远端程序),数据源层是系统去使用外部服务的接口(如数据库、消息系统)。这个”提供服务 vs 消费服务”的方向差异被认为值得单独区分,而不应该因为”反正都是边界”就合并成同一种东西:为别人提供服务的接口,和使用别人服务的接口,其稳定性要求和演化责任本来就不一样。可迁移启发:设计系统边界时,光问”这是不是外部接口”还不够,还要追问”这次调用是谁在为谁提供服务”——方向不同,这个接口该对外承诺的兼容性和该往哪个方向演化,答案也不同。
参考来源
- 位置:《企业应用架构模式》第一部分"表述"之"第1章 分层"之"1.2 三个基本层次"(源文件:_epub-src/OEBPS/Text/000013.html)
- 结论依据:原文说明"这就是Alistair Cockburn的Hexagonal Architecture模式[wiki]背后的逻辑,它将任何系统都视为由到外部系统的接口所围绕的一个核心……因此,从这种意义上说,它是一种对称视图,而不是本书中的非对称分层视图。然而,我认为这种非对称性是有益的。因为,为别人提供服务的接口与使用别人服务的接口存在较大的差别,需要明确区分",直接支撑本卡结论。
- 原始内容:这就是表现层和数据源层相对于核心的本质差别。表现层是系统对外提供服务的外部接口,不管外面是复杂的人类还是一个简单的远端程序。数据源层是系统使用外部服务的接口。这样区分的好处是:客户的不同将改变你对服务的看法。