知识卡片
服务层的必要性判断:多客户端或多事务性资源才需要
内容
服务层的价值在于定义一个可供各类客户共用的公共操作集合,并在每个操作内部协调应用响应——这种响应有时需要跨多个事务性资源做原子化处理。因此,判断该不该设计服务层,关键看两个条件:业务逻辑是否要服务多种不同的客户(比如既有用户界面又有数据加载器/系统集成入口),或者某个用例的响应是否涉及多个事务性资源——只要满足其中之一,即便系统整体不是分布式架构,引入一个由容器管理事务的服务层也是有必要的。反过来,更容易回答的是”什么时候不需要服务层”:如果业务逻辑只服务于一种客户(比如仅有用户界面),或者用例响应不涉及多个事务性资源,很可能就不需要单独的服务层——这种情况下,页面控制器完全可以自己手动控制事务、直接协调所需的响应,甚至直接把响应发给数据源层,不需要多一层抽象。但这个判断不是一锤定音的:只要能预见到未来会出现第二种客户、或者用例响应将来会牵涉到第二个事务性资源,就应该从一开始就设计好服务层,而不是等真正需要时再手忙脚乱地补进去。
参考来源
- 位置:《企业应用架构模式》第二部分"模式"之"第9章 领域逻辑模式"之"9.4.2 使用时机"(源文件:_epub-src/OEBPS/Text/000072.html)
- 结论依据:原文说明"在业务逻辑中有多种客户的应用中,或者其用例中的复杂响应涉及多个事务性资源时,即使不是分布式架构,使用一个容器管理事务的服务层仍是很有必要的……如果你的业务逻辑只有一种客户……或者用例响应并不涉及多个事务性资源,就可能不需要使用服务层……但是,只要你能预见到第二种客户,或用例响应中的第二个事务性资源,则有必要在一开始时就设计一个服务层",直接支撑本卡结论。
- 原始内容:此时,你的页面控制器可以人工控制事务并随时协调所需的响应,可能直接将这些响应发给数据源层。