使用 DTO 和实体是不是违反了 DRY 原则?

Posted

技术标签:

【中文标题】使用 DTO 和实体是不是违反了 DRY 原则?【英文标题】:Is using DTO's and Entities breach of DRY principle?使用 DTO 和实体是否违反了 DRY 原则? 【发布时间】:2010-02-18 00:01:00 【问题描述】:

我正在查看一个名为 Automapper 的库。我对此有一些担忧:

    我们不想公开我们的数据模型 (GOOD)。为什么数据模型应该与您的数据库非常相似?

    使用轻量级 DTO 而不是您的实体。 (好)

    现在我需要将我的实体映射到这些 DTO。我是否尊重 DRY 原则??

【问题讨论】:

【参考方案1】:

有人可能会争辩说 DTO 违反了 DRY,但如果这对您的情况有意义,那么我不会三思而后行。

与大多数编程最佳实践一样,DRY 并不是灵丹妙药。有时你必须妥协。在这种情况下,我认为违反 DRY 是完全可以接受的,以防止因将您的域详细信息泄露给不需要它的调用者而可能出现的问题(例如 N+1 延迟加载性能问题)。

【讨论】:

【参考方案2】:

取决于应用程序。事务应用程序,根据业务逻辑要求,将数据模型暴露给上层代码对于一定规模的项目是有意义的。我认为 DRY 变得越重要,应用程序越大,但我对您提出这个问题的上下文了解不够。

【讨论】:

以上是关于使用 DTO 和实体是不是违反了 DRY 原则?的主要内容,如果未能解决你的问题,请参考以下文章

从基类 (DTO) 继承多个类是不是违反了任何 SOLID 原则?

在不违反 SRP、OCP、DRY 的情况下编写测试

Spring Boot 中的 DTO 转换器模式

在实体中包含集合是不是违反了实体的本应?

DRY原则的误区

Python装饰器笔记