【发布时间】:2023-03-20 20:04:01
【问题描述】:
我无法理解 DDD 的概念。我有一个具有这种结构的 ASP.NET 项目:
ASP.NET MVC4 项目:xxx.UI.Web
类库项目:xxx.Application xxx.Domain xxx.Infra.EF
我正在努力保持这种关系:
xxx.UI.Web 只与 xxx.Domain 和 xxx.Application 有关系
xxx.Domain 没有关系。
xxx.Application 与 xxx.Domain 和 xxx.Infra.EF 有关系
xxx.Infra.EF 与 xxx.Domain 有关系
但是现在我在实体框架中保留这个概念时遇到了很多问题。我在 xxx.Infra.EF 中创建了实体存储库,并在 xxx.Application 中创建了一个通用存储库(带有接口等)。
当我需要将个性化的实体上下文传递给我的存储库时,问题就开始了,因为我使用 xxx.UI.Web 中的存储库并且我无法实例化新的实体上下文,因为它会破坏我的项目模式(实体上下文来自 xxx.Infra.EF)。
我的想法是为我的xxx.UI.Web创建许多帮助处理这种操作的辅助方法,我不想在xxx.Application中创建这种方法(创建很多方法看起来有点奇怪与我的业务逻辑有点关系)。
所以我读了一点关于领域驱动开发 (DDD) 的文章,我知道服务层,我认为它似乎是为解决此类问题而创建的层,或者不是?
我的想法是创建一个名为 xxx.Service 的新类库项目,并使该项目与 xxx.Domain 和 xxx.Infra.EF 保持关系。这样对吗?我知道我可以使用 Entity 上下文为我的案例寻找另一种解决方案,但我想我将来在其他方面会遇到更多这样的问题,所以我试图为它找到解决方案。我应该更多地研究它,但我认为我可以找到解决问题的方法。
【问题讨论】:
-
“传递个性化的实体上下文”是什么意思?你想做什么 ?顺便说一句,在 DDD 中本身没有“服务 layer”...
-
我需要更好地控制上下文的生命周期,因为有时我需要在许多存储库中使用相同的上下文。
标签: asp.net asp.net-mvc entity-framework design-patterns domain-driven-design