gpt4 book ai didi

c# - 从 Web API 2 上的请求和响应构建/映射模型的最佳方法

转载 作者:行者123 更新时间:2023-11-30 23:17:40 24 4
gpt4 key购买 nike

在我的 WebApi 2 应用程序中,我有这个基本结构:

请求/响应模型 -> 域(业务)模型 -> EF 数据模型

WebApi Controller -> 服务层 -> 模型层 -> EF 存储库层

MyModel.cs 文件

public class MyModel
{
public string Property1 { get; set; }
public string Property2 { get; set; }

public MyModel(){}

public MyModel(RedirectRequest request,RedirectResponse response)
{
Property1 = request.Property1;
Property2 = request.Property2;
/*... (more logic here)*/
}
}

Service.cs 文件(在 Controller 中注入(inject)和使用)

public void SaveMyModel(RedirectRequest request,RedirectResponse response)
{
var myModel = new Domain.MyModel(request,response);
/*...*/
var myDataModel = Mapper.Map<Data.Models.MyModel>(myModel);
_repository.AddOrUpdate(myDataModel);
}

public async Task<RedirectResponse> RedirectAndSaveRequest(RedirectRequest request)
{
var response = await Redirect(request);
SaveMyModel(redirect,response);

return response;
}

我正在讨论使用请求和响应模型构建/映射我的域/业务模型的正确方法,以便持久保存。

MyModel 实例需要根据一些业务/逻辑规则构建请求和响应模型,如我所示。

我觉得将这些规则留在域模型本身之外以防止它贫血或构建一个额外的类或层(业务或映射层或类?)只是为了做这个基于逻辑的映射,导致它似乎矫枉过正。一位 friend 告诉我它应该由 MVC 驱动(贫血/虚拟/POCO 模型在类似 DTO 的模式上表现得像 DTO)我完全不同意这一点。

这种方法的正确方法是什么?。非常感谢大家的见解。

最佳答案

API 层将引用包含丰富领域模型的服务层。如果您为 API 分发客户端包装器/SDK,则可以创建一个仅包含数据契约(贫血模型、DTO、POCO)的单独项目。这样你就有了一个通用的数据契约(Contract)项目,可以被消费项目/客户使用。如果不是,您的模型可以与您的 API 项目存在于同一个项目中。

在您的 API 层/项目中,使用 Automapper 配置文件创建映射器,它所做的只是将领域模型映射到您的 API 模型/数据契约。

关于c# - 从 Web API 2 上的请求和响应构建/映射模型的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41311854/

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