首页 > 解决方案 > 如何为我的服务实施 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();

标签: c#asp.net-core.net-core

解决方案


您可以从服务以及您的控制器返回 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。这是一种架构方法,您也可以映射到控制器中。


推荐阅读