存储库使用什么数据模型?

What data models do repositories use?

假设我有一个 Car 和一个 Company 对象:

CarModel
{
   int Id;
   string Name;
   CompanyModel MadeBy;
}

CompanyModel
{
   int Id;
   string Name;
}

这是两个独立的域对象,每个都有自己的存储库。

然而,当我存储汽车时,我实际上并没有包括 Company 对象——我只存储了 id。从这个意义上说,我还有一个 CarEntity 对象:

CarEntity
{
   int Id;
   string Name;
   int MadeByCompanyId;
}

但是当我将汽车读入我的应用程序时,处理我在开始时定义的 CarModel 会更有用,它包含我需要的所有详细信息,例如制造商的公司名称。

  1. 我的汽车存储库方法是否应该处理 CarModel 并在内部与 CarEntity 进行映射(这将涉及在 CarRepository 中使用 CompanyRepository,这听起来令人讨厌)?
  2. 我的汽车存储库应该只处理 CarEntity 并由调用者完成到 CarModel 的映射吗?

我更喜欢第二种方法,因为:

如果 CompanyRepository 的开发人员对函数定义进行了一些更改,那么我们将需要在 CarRepository 中进行这些更改。此外,在第一种方法中,我们将违反 single responsibility principle.

我建议我们可以在 CarEntityToCarModelMapper class 中使用 CompanyRepository