域驱动的设计模式 - 从域访问存储库

时间:2011-03-07 18:50:33

标签: design-patterns domain-driven-design

我一直在努力将域驱动的设计模式应用到我们的Web应用程序中。我们遇到的一个问题是避免在实体中使用存储库。

例如,我们有一些实体,其方法将触发电子邮件。因此,我们必须能够访问电子邮件模板(存储在数据库中),以及在数据库队列表中创建新的电子邮件记录。我们目前通过访问这些实例中的存储库来违反该模式。

我们是否应该在这些实例中使用“服务”或“应用程序”层(我们有很多)?有没有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:5)

是的,我建议您创建一项服务来执行电子邮件的发送。您可以在与域模型相同的项目中创建与服务交互的接口,但在单独的项目中提供服务的实现,以便模型与服务之间没有硬依赖关系。依赖性是相反的 - 从服务到模型。这也为实现单元测试创​​建了一个更好的设置,以确保在应该的情况下调用您的服务,因为您现在可以在单元测试中模拟服务。

要做的一件事是确保在创建其中一个对象类型时注入您的服务。因此,您将对象创建推迟到存储库。或者甚至更好,使用依赖注入框架来解决依赖关系。

答案 1 :(得分:3)

域应该是持久性无知的。你不应该与存储库"来自内部。

在您的方案中 - I would raise domain event(例如"客户正在购买某物")并处理从外部发送的电子邮件。