知识卡片
事务脚本组织成类的两种方式与独立性原则
内容
事务脚本用一个过程组织业务逻辑,每个过程对应表现层发来的单个请求(比如”预订酒店房间”这一个过程里就包含查空房、算价格、更新数据库的全部逻辑),事务间的公共子任务可以拆成共享子程序。把脚本组织成类主要有两种方式。最常见的做法:把若干相关主题的事务脚本放进同一个类,围绕一个主题聚合相关脚本(比如”订单相关”的脚本放一类)。另一种做法:让每一个事务脚本各自对应一个类,这时需要借助命令模式——定义一个所有命令的父类,声明脚本逻辑该有的统一执行方法;这样做的好处是可以在运行时把脚本类的实例当对象来操控,只是作者坦言用事务脚本组织领域逻辑的系统里很少真正碰到这种需求;也可以完全不用类、直接用全局函数,但实例化对象往往有助于用数据隔离的方式规避线程相关问题。无论选哪种组织方式,都有两条独立性原则值得遵守:一是尽可能让事务脚本本身保持独立——至少放进不同子程序,更好是放进与处理表现层、数据源层的类相隔离的独立类里;二是绝不能让事务脚本反过来调用任何表现层逻辑,这样才能保证代码容易修改、脚本容易单独测试。
参考来源
- 位置:《企业应用架构模式》第二部分"模式"之"第9章 领域逻辑模式"之"9.1 事务脚本"(源文件:_epub-src/OEBPS/Text/000060.html)
- 结论依据:原文说明"可以用两种方法来把事务脚本组织成类。最常用的方法是将数个事务脚本放在一个类中……另一种方法则是每一个事务脚本对应一个类,此时需使用命令模式……绝不要让事务脚本调用任何表现层逻辑;这样会使我们容易修改代码和测试事务脚本",直接支撑本卡结论。
- 原始内容:我喜欢尽可能分离事务脚本。至少应当将它们放在不同的子程序中,而更好的方法则是将它们置于与其他处理表现层和数据源层的类相独立的类中。此外,绝不要让事务脚本调用任何表现层逻辑。