clean-architecture - 存储库应该能够与实体一起工作还是只返回数据?

标签 clean-architecture

存储库函数应该从数据库返回实体吗?

例如,如果我有一个像这样的实体:

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/

相关文章:

firebase-authentication - 具有简洁架构的 Firebase Phone Auth

ios - 无法满足协议(protocol)(具有关联类型)的一致性

clean-architecture - 在整洁的架构中创建实体时如何引发实体的域事件

android - Clean Architecture(域)中的业务逻辑是什么

android - Android 中具有整洁架构的 mvvm 和不具有整洁架构的 mvvm 有什么区别?

unit-testing - Groovy MockFor : How to avoid nested closures when using multiple mocks?

flutter - 对于Flutter,MVVM架构和Reso Coder的简洁架构有何不同?

c++ - 如何在 C++ 中实现整洁的架构组件边界?

go - 在哪里存储测试(项目结构-最佳实践)?

clean-architecture - 关于 Clean Architecture 中实体对 Gateway 的依赖