ASP.NET 项目中的服务层是什么?

What is the service layer in an ASP.NET project?

我在理解 DDD 的概念时遇到问题。我有一个具有这种结构的 ASP.NET 项目:

ASP.NET MVC4 项目:xxx.UI.Web

Class 库项目:xxx.Application xxx.Domain xxx.Infra.EF

我正在努力保持这种关系:

xxx.UI.Web only have relation with xxx.Domain and xxx.Application

xxx.Domain doesn't have relations.

xxx.Application have relation with xxx.Domain and xxx.Infra.EF

xxx.Infra.EF have relation with xxx.Domain

但现在我在 Entity Framework 中遇到了很多问题。我在 xxx.Infra.EF 中创建了实体存储库,并在 xxx.Application 中创建了一个通用存储库(带有接口等)。

当我需要将个性化的实体上下文传递到我的存储库时,问题就开始了,因为我使用 xxx.UI.Web 中的存储库并且我无法实例化新的实体上下文,因为它会破坏我的项目模式(实体上下文来自 xxx.Infra.EF)。

我的想法是创建许多辅助方法来为我的 xxx.UI.Web 处理此类操作,我不想在 xxx.Application 中创建这种方法(看起来有点奇怪创建许多与我的业务逻辑有一点关系的方法)。

所以我阅读了一些有关域驱动开发 (DDD) 的内容,并且了解服务层,我认为它似乎是为解决此类问题而创建的层,还是不是?

我的想法是创建一个名为 xxx.Service 的新 class 库项目,并使该项目与 xxx.Domain 和 xxx.Infra.EF 保持联系。这样对吗?我知道我可以用 Entity context 为我的案例寻找另一个解决方案,但我想我以后会遇到更多这样的问题,所以我试图找到它的解决方案。我应该更多地研究它,但我想我可以找到解决我问题的方法。

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

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

建议你进一步学习分层架构的概念

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

最常见的分层架构样式是 "Onion Architecture"。请参阅下面的图片和 link。

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

服务层

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

在我们的方法中,表示层不直接与基础设施和域通信。我们有一个介于表示和域之间的服务层。

上述架构大量借鉴了洋葱架构。我们没有域服务。 Application Core 是我们的 CrossCutting Layer。