【问题标题】:What is the service layer in an ASP.NET project?ASP.NET 项目中的服务层是什么?
【发布时间】: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


【解决方案1】:

我建议你进一步研究分层架构的概念。

您是正确的,域不应引用其他层,例如表示层和基础设施层。

最常见的分层架构风格是“洋葱架构”。请参阅下面的图片和链接。

http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

服务层

您也正确,新层(服务层)将解决您的问题。你看,问题的出现是因为 UI/Presentation Layer 直接与存储库(基础设施)对话。

在我们的方法中,表示层不直接与基础架构和域进行通信。我们有一个介于 Presentation 和 Domain 之间的 Service 层。

上述架构大量借鉴了洋葱架构。我们没有域服务。应用程序核心是我们的横切层。

【讨论】:

    【解决方案2】:

    人们经常误解多层应用程序的意义。目标不一定是消除依赖关系,而是封装和模块化代码。您的 MVC 前端不需要关心您的实体以及它们如何查询、添加、更新等,但这并不意味着它不需要访问它们。总而言之,不要专注于项目引用,而是将不在每个项目“域”中的代码分解到更合适的“域”中。

    为此,根据您提供的信息,实际上无法准确地说出您应该做什么。这个问题一开始是固执己见的,而且很可能最终会被关闭。最终,您必须决定什么最适合您的项目。做有意义的事,而不是盲目地遵循某种模式。毕竟,无论如何,模式应该只是对常见问题的常识方法的编纂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2020-07-16
      • 2012-08-01
      • 2020-11-22
      • 2017-01-28
      • 2011-08-15
      • 2010-09-13
      相关资源
      最近更新 更多