DDD,如何以及在何处将未实现的数据库表添加到域?

时间:2019-02-22 10:51:10

标签: c# domain-driven-design

尝试使用DDD构建一个Stample项目时,我遇到了一个问题:
 为了验证邮政编码,地址等,我有一组要查询的数据库表(20个表数百列,26Mo)。
 这些表与我的网域无关。该表具有自己的连接字符串,可以存储在权限数据库的外部。

我当时正在考虑向Core添加一个连接字符串,并使用一个简单的orm raw sql查询来验证数据。  用C#编写的过程比用SQL编写的过程更容易,因此没有存储过程可以完成这项工作。

这些数据没有修改。仅查询。

2 个答案:

答案 0 :(得分:2)

我认为重要的是要记住,DDD不一定适用于您所做的所有事情。如果您有一个复杂的问题域值得DDD带来复杂性,那就很好。但是,也可以将软件的其他部分(实质上是其他边界)设置为CRUD。实际上,CRUD是您可以轻松摆脱它的最佳之选。作为@ D.R。说,您可以使用类似于事务脚本的方式加载数据(我将来会看到类似IZipCodeValidator的信息),并将结果传递到您需要的位置,或者您可以考虑允许应用程序服务获取使用CRUD(IZipCodeRepository)处理该ZipCode数据,并将其传递给具有复杂验证规则的完整域对象。

我认为这是DDD的纯粹观点,试图避免将其传递给执行操作的域对象(例如DomainObject.ValidateAddress(address, IZipCodeRepository repo))上的方法,而宁愿传递对验证有用的值(例如{{1} }。我认为任何人都可以看到潜在的性能问题,因此您的工作量可能会有所不同。如果可以的话,我只想抵抗

答案 1 :(得分:1)

这听起来像是其自身的有限上下文。我可能会使用它们之间的反腐败层从核心域中查询它。因此,您的域仅使用服务接口。您的应用程序层将通过反腐败层将此接口实现到其他有界上下文。该实现可以使用简单的数据库查询机制,例如ADO.NET查询。