gpt4 book ai didi

asp.net-mvc - 在 ASP.NET MVC 中将实体映射到模型并执行业务逻辑

转载 作者:行者123 更新时间:2023-12-04 04:12:35 27 4
gpt4 key购买 nike

将数据库实体映射到模型并执行业务逻辑的最佳实践是什么?我已经看到了两者的相当不同的实现。我注意到许多实现,其中存储库(在数据层中)本身负责将数据库实体映射到域模型。例如,一个可以执行此操作的存储库:

public IQueryable<Person> GetPersons()
{
return DbSet.Select(s => new Person
{
Id = s.Id,
FirstName= s.FirstName,
Surname= s.Surname,
Location = s.Location,
});
}

但是在对 N 层设计的 SO 进行全面搜索后,我注意到虽然没有 Elixir ,但在大多数情况下,建议手动或使用 Mapper 在 MVC 项目中的 Controller 内部执行映射。还重申了服务层不应该执行映射,它的职责应该是执行业务逻辑。这里有几个问题:
  • 关于将实体映射到模型的位置,反之亦然,哪种方法是可取的?存储库应该这样做还是应该在 Controller 中完成映射?
  • 假设我想对从数据库中检索到的实体执行一些业务逻辑,例如返回Person 的全名。实体,或增加所有年龄 Person s 到 10 年,应该在哪里执行此操作。在模型本身?例如,我会有一个 FullName模型上的属性将计算全名和年龄?或者我是否在我的服务层中定义了一些服务来执行业务逻辑?

  • 编辑

    哇这么多接近的票。抱歉,我搜索的不够全面。我在这里提出的“在何处执行业务逻辑”问题已经可以在 SO 和其他地方找到(尽管有时会有些神秘地传达):

    Validating with a Service Layer by Stephen Walther

    Skinny Controllers

    Another great, but more generic answer here on SO

    Where Should I put My Controller Business Logic in MVC

    Does a Service Map Entities to a View Model

    但是,我还没有找到解决我遇到的映射问题的标准解决方案,我想我可能可以更 Eloquent 地表达我的问题。因此,普遍的共识似乎是业务逻辑进入服务层,而将域模型映射到 View 模型应该发生在 Controller /表示层。并且由于建议不要将您的 DB 实体显示到数据层以外的任何层,因此建议您手动或通过诸如 Auto Mapper 之类的映射器将您的实体映射到数据层的域模型(这是我从阅读很多文章)。我的困惑源于应该在何处将实体映射到域模型以及将域模型映射到 View 模型的位置。然而,正如我之前提到的,我可以更清楚地表达我的问题。我困惑的原因是我读过将实体映射到域模型应该发生在 Controller 中,这应该改写为“将实体映射到域模型应该稍后发生在数据上,并将域模型映射到 View 模型应该发生在 Controller 中。

    最佳答案

    1. Which method is advisable in regards to where to map the entities to models and vice versa? Should the repository do this or should the mapping be done in the controller?


    我强烈希望看到映射发生在存储库而不是 Controller 中。正如 Suhas 在他的回答中提到的那样, Controller 需要纯粹地充当协调员。作为替代方案,也许您可​​以使用存储库中的映射类来传递实体并返回映射模型 - 有点像 Auto Mapper

    1. Suppose I want to perform some business logic on the entities that I have retrieved from the database, for example, return the full name of the Person enities, or increase the age of all Persons by 10 years, where should this operation be performed. On the model itself? For example would I have a FullName property on the model which would compute the full name and the age? Or do I define some service inside my service layer to perform business logic?


    如果可能,请在服务上执行业务逻辑。为什么要把服务层应该做的事情交给应用来做?我相信这是服务的域,而不是应用程序的域。此外,我认为从模型中返回连接或派生的属性也不是一件坏事。

    概括:
  • Controller 处理来自 View 的请求并将它们转发给
    存储库
  • 存储库是通往数据存储的管道
  • 服务处理来自存储库的请求,处理业务逻辑,
    并返回映射模型
  • 关于asp.net-mvc - 在 ASP.NET MVC 中将实体映射到模型并执行业务逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14234734/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com