c# - 如何为我的服务实施 DTO?
问题描述
目前我必须模型。一个用于存储密码的用户模型,以及一个隐藏密码字段的 UserDTO。
public class User
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
[JsonIgnore]
public string Email { get; set; }
}
public class UserDTO
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string UserName { get; set; }
[JsonIgnore]
public string Email { get; set; }
}
现在在连接到我的 mongoDB 的服务中,我想将模型更改为 DTO 版本。
服务 :
public List<User> Get() => _users.Find(user => true).ToList();
我应该如何处理这个?或者我应该在我的控制器上进行更改?
控制器 :
public ActionResult<List<User>> Get() => _userService.Get();
解决方案
您可以从服务以及您的控制器返回 UserDTO。
服务:
public List<UserDTO> Get() => _users.Where(user => true).Select(x=> new UserDTO{
UserName = x.UserName,
....
}).ToList();
控制器:
public ActionResult<List<UserDTO>> Get() => _userService.Get();
您可以使用 AutoMapper 进行映射而不是Select
方法。
作为最后一点我想提一下,您应该从 Controller 返回 UserDTO,但您不必从服务返回 dto。这是一种架构方法,您也可以映射到控制器中。
推荐阅读
- r - 根据条件从前几行中减去
- ios - UITapGestureRecognizer 不在 UILabel 上工作,但在父视图上工作
- excel - 隐藏除日期范围以外的多列
- javascript - 错误类型错误:无法读取未定义的属性“ngInjectableDef”
- bluetooth-lowenergy - 你知道如何在手机上编写 BLE5 功能吗?
- json - 如何在jmeter中断言json对象?
- nativescript - ObservableArray 上的拼接导致崩溃
- java - 406 HttpMediaTypeNotAcceptableException:找不到“文本/日历”类型输出的可接受表示
- php - 索引在 php 的 foreach 循环中不保持固定
- java - Spring Security 5.1 - 使用 WebClient 获取客户端凭证流的令牌