【问题标题】:Need clarification on clean architecture and repository pattern需要澄清干净的架构和存储库模式
【发布时间】:2020-04-13 05:31:18
【问题描述】:

在过去的 4 周里,我一直在阅读有关此主题的材料,我在 github 上看到了许多实现,到目前为止,我了解其目的,但是我在实现方面遇到了一些问题。

让我们从用例开始。如果我是正确的,usecase 持有业务逻辑并执行操作,例如通过 repositories 验证或获取一些数据并返回一些业务对象。

在应用业务层为repository定义接口,在interface-adapters层实现。

repository 实现存在于interface-adapters 中,需要某种从外部注入的数据源(数据源在哪里),我应该在这一层实现数据源接口吗?

对我来说最令人困惑的是models 和 DTO。 models 到底是什么,目的是什么以及为什么我要使用 model,我使用猫鼬作为 ORM,所以,我假设您的架构是 model

这意味着,model 只是您从外部获取的一些数据(例如:Api、DB 等),然后您将此数据映射到实体,如果是,那么我应该在哪里进行映射(在存储库中或用例或数据源)?

我还没有接触过控制器、演示者或视图模型,因为我已经很困惑了。

【问题讨论】:

  • 模型、DTO 和视图模型实际上都是相同的东西——表示结构化数据的方式。通常,“模型”指的是数据库模型(模式),“DTO”是用于在服务或端点之间传递数据的数据传输对象(WebAPI 将 DTO 返回给调用者),视图模型用于前端end 绑定到视图(例如 MVVM 模式)。当然,这是所有主观和不同的公司/博客/文档都使用自己的定义,但这应该是一个很好的经验法则。

标签: typescript repository-pattern clean-architecture


【解决方案1】:

在纯粹的“干净”架构中,每一层都应该使用自己的模型。因此,您的 ORM 模式模型与您的实体或 DTO 不同(但它们会从一个映射到另一个)。从模式模型到实体的映射应该发生在存储库中,因为它们返回实体。在你需要 DTO 的地方,可能是为了展示,你在那个层上进行映射。

【讨论】:

    猜你喜欢
    • 2016-06-24
    • 2019-12-06
    • 2011-05-07
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多