用于返回由多个存储库创建的对象的模式

本文关键字:创建 对象 模式 存储 返回 用于 | 更新日期: 2023-09-27 18:24:04

和以往一样,我一直在寻找编写更好程序的模式。最近我花了一些时间在定制RepositoriesDTO上。一切都很好,但我有一个场景,因为我有三个DTO's:

  1. 代币
  2. 用户
  3. 生物

和三个存储库(映射到DTO)

  1. TokenRepository
  2. 用户存储库
  3. BioRepository

现在,如果用户"A"提出请求,然后调用GetUserByCredentials(User user);

我想制作一个物体——也许是UserFacade?它具有所有三个表/Obj的属性。

那么,基本上我应该考虑的最佳方法或模式是什么?

值得注意的是,DTO之间没有任何关系。

我觉得从长远来看,这将保持我所有的存储库/DTO's的清洁。

//编辑

只是为了澄清数据库中包含的关系。我不会将tbl_User作为EF构建的对象返回,而是在不使用代码优先/自动映射器等的情况下将其映射到DTO

例如(旧方法):

public User GetUser(string email, string password)
{
    var user = context.tbl_User
        .Where(u => u.Email == email && u.Password == password)
        .Select(y => new User
          {
              UserID = y.UserID,
              Email = y.Email,
              Password = y.Password,
              Token = y.tbl_Token
                      .Where(x => x.UserID == y.UserID)
                      .Select(z => z.TokenName).FirstOrDefault(),
              ProfilePic = y.tbl_Bio.Where(t => t.UserID == y.UserID).Select(p => p.Avatar).FirstOrDefault(),
              RoleID = y.RoleID
          }).FirstOrDefault();
    return user;
}

理想情况下,我想去掉Token和ProfilePic,因为这些属性已经存在于自己的类(DTO)中

我希望我没有太多考虑模式哈哈

谢谢你抽出时间!

问候,

用于返回由多个存储库创建的对象的模式

我通常使用存储库在Aggregate Roots上运行。

Martin Fowler将聚合根定义为

可以作为单个单元处理的域对象的集群

在这种情况下,User将是您的聚合根,TokenBio将是User的属性。

这样,当您需要更改BioToken时,您将通过UserRepository 进行更改