存储库函数应该从数据库返回实体吗?
例如,如果我有一个像这样的实体:
class Person(
int id,
string name,
int age
) { ...
和一个存储库方法,它返回一个像这样的 Person 实体:
public Person findPersonById(int id)
此方法是否应该返回 Person 实体,以便存储库创建实体并仅返回它,或者存储库应该返回仅包含 PersonEntity 数据而不是实体本身的模型,如下所示:
data class PersonModel(
int id,
string name,
int age
)
最佳答案
存储库对象 (PersonRepository) 的设计目的是返回域实体 (Person)。
同一个存储库对象可能会调用某些外部资源(例如 person api),该资源返回一个模型(PersonModel/PersonDTO)以转换为已经提到的域实体。另外,按照设计。
稍后,表示层(或 api 层)可能应该将域实体转换为 View 模型(PersonViewModel)以返回给客户端。再次强调,这是设计使然。
当然,如果您的 api 几乎没有业务规则,您可能希望跳过 DTO(PersonModel、PersonViewModel)并通过所有层(基础设施、应用程序、表示)使用一个(n 贫乏的)域实体。
总之,存储库对象“烘焙”了域(应用程序)层的实体。
关于clean-architecture - 存储库应该能够与实体一起工作还是只返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73990738/