java - Spring boot 中实体使用与 Dto 使用对比
问题描述
通常,当我创建 REST 应用程序时,我会通过以下方式创建它们:
控制器(接收/返回 Dtos)-> 服务(接收和返回 Dtos,并使用 MapStruct 在内部映射从到实体)-> 存储库(始终接收实体)
但我意识到现在我们可以使用 spring 属性:
spring.jpa.open-in-view=false
所以我想知道是否仍然需要在 Spring REST 应用程序中使用 Dto 以及使用它们或避免使用它们的含义是什么?
解决方案
我认为没有正确的方法。正如你所说,我们需要讨论权衡。
对所有层使用一个模型进行开发,可能会使您的开发速度更快。您不会花时间创建多个 DTO(也避免创建实体模型和 DTO 之间的映射)。但是,您将全部耦合。模型中的微小变化可能会影响所有层,您可能必须处理它。每当您需要调整代码时,可能会花费更多的精力。
另一种方法是为每一层设置 DTO(或专用/特定模型),这可能会增加您的开发时间。在这种情况下,每当请求更改时,对其他层的影响可能很小。我的意思是,降低了在其他层中破坏东西的风险。正如您的问题一样,实体模型的更改不会影响 REST API,因为它只公开了 DTO。
总而言之,主要问题是:您更喜欢“开发速度”还是“层/类之间失去耦合”?
如您所见,这取决于您的需要。
推荐阅读
- c# - 重新定位图表点标签
- django - 从表单集中的 ModelChoiceField 管理 Django 模型实例的另一种方法
- python - 如何使这两种关于在笛卡尔积上循环的替代方案减少冗余?
- css - 无效选择器中的 Angular 5 警告';
- r - as.Date 返回 N/A,字符串为 %d/%m/%Y,& 语言环境解决方案不会更改 R 中的输出
- entity-framework-6 - 在同一 DbContext 中设置选择性审计
- c++ - QT qScriptConnect 不工作
- singularity-container - 错误:在构建奇点容器时,在未初始化的配置子系统上调用了singularity_config_get_value
- python - 将带有注释的签名添加到扩展方法
- reactjs - 构造函数中的数组道具为空