typescript - 需要澄清干净的架构和存储库模式
问题描述
在过去的 4 周里,我一直在阅读有关此主题的材料,我在 github 上看到了许多实现,到目前为止,我了解其目的,但是我在实现方面遇到了一些问题。
让我们从用例开始。如果我是正确的而不是usecase
保存业务逻辑并执行诸如验证或获取一些数据repositories
并返回一些业务对象之类的操作。
repository
您在应用程序业务层定义接口,并在interface-adapters
层中实现它。
repository
实现存在并需要某种从外部注入的interface-adapters
数据源(数据源在哪里),我应该在这一层实现数据源的接口吗?
对我来说最令人困惑的是models
和 DTO。究竟是models
什么,目的是什么以及为什么我要使用 a model
,我使用 mongoose 作为 ORM,所以,我假设您的架构是 a model
?
这意味着,model
只是您从外部获取的一些数据(例如:Api、DB 等),然后将此数据映射到实体,如果是,那么我应该在哪里进行映射(在存储库或用例或数据源中)?
我还没有接触过控制器、演示者或视图模型,因为我已经很困惑了。
解决方案
在纯粹的“干净”架构中,每一层都应该使用自己的模型。因此,您的 ORM 模式模型与您的实体或 DTO 不同(但它们会从一个映射到另一个)。从模式模型到实体的映射应该发生在存储库中,因为它们返回实体。在您需要 DTO 的地方,可能是为了演示,您在该层上进行映射。
推荐阅读
- api - 如何测试主要使用外部 API 的代码?
- c++ - 1秒可以打印多少个数字
- python - 如何在python中创建一个单独的处理队列?
- ios - 带有 SwiftUI 视图和 Swift 类的 NSFetchRequest - “executeFetchRequest:错误:获取请求必须有一个实体。”
- javascript - 从浏览器自动清除缓存
- google-cloud-platform - 将命令 (mqtt) 从托管在谷歌云 (Compute Engine - VM) 中的 Web (Apache+php+Ajax) 发送到特定设备 (raspberry pi) 的最佳方式
- macos - Mac: Text-to-Speech: 如何为 TTS 功能添加缩写?
- java - Blynk 的 Raspberry pi 服务器,启动服务器出现问题
- java - 如何在不使用零的情况下终止用户输入?
- mysql - 我在 phpmyadmin 中有错误 #1064 说无法识别的语句类型。(在位置 46 的“where”附近)