- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题是opinion-based .它目前不接受答案。
想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.
去年关闭。
Improve this question
在 clean architecture软件方法实体是最内层,不应该依赖于像 ORM 这样的东西。
为方便起见,我想在我的项目中使用 ORM,而 gorm 似乎是一个流行的库。在 gorm docs推荐的使用方法是使用 gorm.Model
struct包含在要持久保存在数据库中的结构中。
当尝试在我的项目中使用 gorm 并遵循干净的架构时,我最终得到了一个映射层,该映射层将我的实体与特定于 gorm 的持久性模型进行映射,以使 gorm 依赖于我的实体。这似乎消除了使用 ORM 的所有好处,例如这个blog post被明确警告。
在我看来,在遵循干净架构的同时避免映射层只能通过使用侵入性较小的 ORM 甚至只是一个 sql 扩展来实现,例如sqlx我可以在哪里直接使用我的实体?
最佳答案
我感觉这个问题更适合 Software Engineering SE但我会尝试回答。
对您的问题的简短回答是:是的。
如果您想完全遵循 Clean Architecture,那么要做的就是构建完全不依赖于您的持久层的域模型。使用 gorm,这需要构建域 <-> 持久性模型映射层以及由此产生的所有附加复杂性。 Gorm 仍然会使查询和保存该持久性模型比创建您自己的查询更容易,并且与我体验过的其他语言的 ORM 相比,它仍然相当轻量级。
从技术上讲,您不需要 gorm.Model
在模型结构中。拥有 ID int
字段,加上任何 CreatedAt
, UpdatedAt
, DeletedAt
你想要的字段就足够了(这就是 gorm.Model 给你的)。但是你总是会添加其他与 gorm 做事方式有关的工件,所以如果 gorm
包不存在于您的模型结构中。
但
这就引出了一个问题,即遵循 Clean Arch 是否是您项目的正确决定。与所有设计决策一样,它需要权衡取舍,并且根据所构建系统的范围和复杂性或多或少有意义。如果您预见到您的项目将遇到的挑战 Clean Arch 可以缓解,那么现在额外的投资将得到返回。另一方面,如果架构的某些方面可以缓解您在特定情况下不太可能遇到的问题,那么您可能会更加宽容。您链接的博客文章的结论也提出了相同的论点:
NHibernate provides the best set of trade-offs between theimplementation complexity and the overall purity. There still will beORM concerns leaking into your domain model, however. But I think it’sa low price for all the benefits you’ll get out of it: speed ofdevelopment, rich functionality, and separation of concerns.
关于go - 在整洁的架构设置中使用 gorm 时是否需要持久性模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65978694/
我想知道将内存中的树结构存储为用于持久性目的的目录树的实用性。在我的例子中,他的目标文件系统将是 ZFS,一旦创建了结构,它将很少被多个进程访问。 使用目录树作为数据树持久化机制的性能如何? 最佳答案
我已经创建了 docker private registry 并且能够从同一网络中的其他 raspi 推送和拉取(将 registry ip 添加到 insecure-registry 选项) doc
我正在尝试构建我的第一个“真正的”Haskell 应用程序,一个使用 Servant 的 API,我在其中使用 Persistent 作为数据库后端。但是我在尝试使用 Persistent 进行某种类
我已经在 stackoverflow 上看到了 ASP.NET MVC C# 中的持久性 cookie 示例。但我不明白为什么下面的代码不起作用。 首先我写入cookie: HttpCookie co
我是 Java Persistence API 的新手.我刚学会它,现在想在我的 Java 桌面应用程序中使用它。但我有以下问题: Q1。哪个 JPA 实现的大小最小(因为我希望我的应用程序的大小尽可
我正在尝试按照 android 蓝图指南将 MVP 模式实现到我的项目中。目前,我将用户(实体数据)保存在我的 Presenter 中,我真的不喜欢这样做,因为在每次配置更改时,presenter 都
我需要一个类似 map 的数据结构(在 C++ 中)来存储具有以下功能的对 (Key,T): 可以在当前结构中插入新元素(Key,T) 可以在当前结构中根据Key搜索元素 您可以制作当前版本结构的“快
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我的配置 MBean 的持久性存在问题。我的配置: @ManagedResource(objectName = "pl.mobile
docker 中的 RabbitMQ 在删除没有卷的容器后丢失数据。 我的 Dockerfile: FROM rabbitmq:3-management ENV RABBITMQ_HIPE_COMPI
我正在尝试编写一个类型类,以简化使用持久性、aeson 和 scotty 编写 CRUD 后端 这是我的想法: runDB x = liftIO $ do info CRUD a where
当我尝试使用 持久化对象时遇到问题多线程 . 详情: 假设我有一个对象 PaymentOrder其中有一个列表 PaymentGroup (一对多关系)和 PaymentGroup包含 CreditT
我想使用纯功能数据结构和以下操作来实现环形缓冲区 通过索引进行高效随机访问 添加到前面 从背面移除 使用持久数据结构的原因是因为我有一个写入器线程和多个读取器线程,并且我想避免读取器阻塞写入器。 这可
persistence.xml 中关于 derby 客户端驱动程序的属性声明应该是什么?例如: 当我想从 Java 更新数据库时,我不断收到下面的异常。 实际上我需要客户端驱动程序而不是 Embed
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我希望用户即使关闭浏览器也不必登录。我的 cookie 将在一个月后过期。 用户登录成功 $session = CGI::Session->new (undef, undef, {Directory
我正在与 JBOss 作斗争,并且遇到了一个似乎很难解决的问题,但事实证明我不能。当我尝试部署一个简单的 Java Web 应用程序时,遇到异常: org.hibernate.ejb.Hibernat
当使用具有持久性的 Workflow Foundation 时,我们想删除一些(或全部)工作流,这些工作流不再应该被持久化/运行。 我可以使用任何脚本/工具吗? 最佳答案 没有可用于执行此操作的标准
我正在使用 JPA,并且我正在为所有引用实体使用二级缓存。一切正常,我可以从二级缓存中获取实体,因为它们之前已经被选中。 现在,我有两个应用程序,它们都使用相同的数据库(因此它们都使用相同的表、值等)
所以我正在制作一个 spring-boot 应用程序,并且从外部库导入一些数据模型(通过 maven 导入)。我有一些模型,它有一个外部库类型的字段,我希望能够保留它。像这样的东西: package
我是一名优秀的程序员,十分优秀!