有可能(甚至很可能)我只是没有完全理解“工作单元”的概念。基本上,我将其视为面向对象环境中使用的一种广泛事务。启动工作单元,与对象交互,提交或回滚。但这如何分解为这些对象背后的数据存储上的实际事务呢?
在具有单个 DB 和 ORM(例如 NHibernate)的系统中,这很容易。事务可以通过 ORM 维护。但是对于一个自定义域模型掩盖了许多不同数据源的系统呢?并非所有这些数据源都是关系数据库?(这里的文件系统做了很多工作。)
现在,我坚持这样的想法:“您根本无法在同一个‘原子’业务操作中维护跨 SQL2005 DB、SQL2000 DB、DB2 DB 和文件系统的事务。” 因此,目前团队中的开发人员(通常彼此独立工作)有责任在代码中手动维护事务。每个数据库上都可以有适当的事务,但是整个业务操作在每个重要步骤中都是手动检查和平衡的。
然而,随着领域复杂性的增加和标准开发人员的流动性,这种方法将随着时间的推移变得越来越困难和容易出错。
是否有人对如何最好地处理这样的域或以前如何处理过这样的域有任何建议或示例?在这种情况下,实际的“领域”仍处于起步阶段,作为原型演变为有朝一日扩展和使用/替换由不同遗留应用程序组成的大型生态系统。因此,有足够的空间进行重新设计和重构。
作为参考,我目前针对的设计的 10,000 英尺视图是: 大量小型客户端应用程序调用基于消息的中央服务。该服务是进入“领域核心”的入口,可以被认为是一个大型 MVC 风格的应用程序。向服务发出请求(很像“动作”),由处理程序(很像“控制器”)接收。任何程序都在那里。它们与包含所有业务规则的模型交互。模型通过与存储库(数据库 x、数据库 y、文件系统、电子邮件、任何外部资源)交互来发布事件,监听器(“服务”?这部分在设计中仍然很模糊,需要改进)接收和处理。相应地,所有快乐的依赖注入。
对不起所有的冗长:) 但如果有人有任何建议,我很想听听。即使(特别是)如果那个建议是“你的设计很糟糕,试试这个……”谢谢!