报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

不同观点:DTO 与领域对象

  • 2011-06-27
  • 本文字数:858 字

    阅读完需:约 3 分钟

自从 NHibernate 与 WCF 出现以来,.NET 开发者们就开始向统一的实体模型概念上不断靠拢。最后的结果就是同一个类可以作为 ORM 实体、WCF DTO 以及 MVC、MVP 与 MVVM 框架的模型。.NET Dependency Injection 的作者 Mark Seemann 认为这不见得是件好事。

问题的关键在于“在边界处,应用并不是面向对象的”。如你所见,大多数序列化技术都要求 public、默认的构造方法以及可写的属性。本质上,在设计 DTO 时,这些要求会迫使你打破封装和数据隐藏的原则。甚至连基本的不变性,如要求字段不为 null/ 不为空都不可能实现,因为 DTO 会忽略掉一切。Mark Seemann 继续证明自己的论断:

  • 服务共享模式与契约,而非类。
  • DTO 并不会破坏封装,以为他们根本就不是对象。

根据这种情况,Mark 提出了 3 种观点:

第 1 种观点是坚持已有的观念。为了消除隔阂,我们必须得开发一个转换层,用于将 DTO 转换为封装良好的领域对象。这正是书中的示例所采取的方式。然而,我越发觉得这种解决方案并不是最佳的。这会导致可维护性的问题(这也是我写书时所遇到的问题:当你写完后,你所知道的要比刚开始动笔时多不少,我并不是说书不好,只是想说它并不完美而已)。 第 2 种观点是不再将数据当作对象,将其看作是它自身所表示的结构化数据。如果我们所用的编程语言有单独的结构化数据概念就太好了。有趣的是,虽然 C#并没有这个概念,但 F#却有多种方式来建模数据结构而不涉及行为。或许这是更好的数据处理方式,我还要多尝试几次才行。

第 3 种观点是使用动态类型。在文章 Cutting Edge: Expando Objects in C# 4.0 中,Dino Esposito 介绍了通过动态方法来使用结构化数据,这可以更快速地自动生成代码并向结构化数据提供轻量级的 API。这种方法更有前途,它并没有提供编译期的反馈,但这只不过是一种安全上的错觉而已。我们需要通过单元测试来快速获取反馈,但我们一直都在使用 TDD,不是么?

如果你对面向对象设计与封装感兴趣,那就一定不能错过名为 Poka-yoke Design: From Smell to Fragrance 的系列文章。

查看英文原文: Differing Opinions: DTOs vs Domain Objects

2011-06-27 07:463488
用户头像

发布了 88 篇内容, 共 266.2 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

数字身份发展趋势前瞻:增强用户体验

芯盾时代

数字身份 iam 统一身份认证

07.适配器模式设计思想

杨充

养护系统

深圳亥时科技

CST电磁仿真教程:如何进行时域自适应网格设置

思茂信息

网络 仿真 cst

物联网监控数据采集,传输和存储方案:使用 GreptimeDB 和 YoMo

Greptime 格睿科技

数据库 物联网 集成 数据监控

浅谈TiKV集群运维问题排查与修复——磁盘空间占用问题

vivo互联网技术

运维 TiKV

HarmonyOS 5.0应用开发——文件读写

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

双报到系统(源码+文档+部署+讲解)

深圳亥时科技

WEB 3D CAD中绘制一个窗户模型

WEB CAD SDK

STP CAD 2023下载

HarmonyOS 5.0应用开发——瀑布流WaterFlow

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——RCP框架实现断点续传

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——多种方式实现图片解码

高心星

鸿蒙 HarmonyOS HarmonyOS框架 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——Navigation实现页面路由

高心星

鸿蒙 HarmonyOS 应用开发 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——图像PixelMap变换

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——应用打包HAP、HAR、HSP

高心星

鸿蒙 HarmonyOS 应用开发 鸿蒙5.0 HarmonyOS NEXT

剧本杀平台(源码+文档+部署+讲解)

深圳亥时科技

小间距LED显示屏前维护的意义

Dylan

产品 厂商 LED显示屏 屏幕

HarmonyOS 5.0应用开发——菜单的显示

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——下拉刷新和上拉加载更多组件

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——抽屉布局SideBarContainer

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——RCP框架的使用

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

火山引擎VeDI数据服务平台:在电商场景中,如何解决API编排问题?

字节跳动数据平台

HarmonyOS 5.0应用开发——图像PixelMap压缩保存

高心星

鸿蒙 HarmonyOS 应用开发 鸿蒙5.0

用 GreptimeDB 和 Metabase 解锁时序数据洞察的无限潜力

Greptime 格睿科技

数据分析 时序数据库 数据可视化

EMR Serverless Spark:一站式全托管湖仓分析利器

阿里云大数据AI技术

大数据 Serverless 数据分析 云原生 EMR

大模型退潮,奇点将至|StartDT Talk

奇点云

AI

不同观点:DTO与领域对象_SOA_Jonathan Allen_InfoQ精选文章