写点什么

不同观点: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:463497
用户头像

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

关注

评论

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

新的AI UX证书 - Qgenius UXP

科技热闻

车联网服务平台运营企业的数据分类分级

芯盾时代

车联网 物联网 智能汽车 智能网联

DeepSeek-V3模型:软件测试智能化的新篇章与挑战

测试人

软件测试

医学影像软件的开发的技术难点

北京木奇移动技术有限公司

医学影像 软件外包公司 webgl开发

智源研究院发布2025十大AI技术趋势

智源研究院

医学影像软件开发的技术框架

北京木奇移动技术有限公司

医学影像 软件外包公司 webgl开发

你有一份待查收的TextIn文档解析内测邀请函!

合合技术团队

图像识别 #人工智能 文档解析技术 弯曲矫正

折腾之王:JavaScript之父Brave浏览器与BAT的诞生

李游Leo

JavaScript 前端 Javascript之父 前端历史

医学影像软件的开发

北京木奇移动技术有限公司

医学影像 软件外包公司 webgl开发

智慧公厕解决方案:定制化服务,满足多样化需求

光明源智慧厕所

鸿蒙 NEXT 开发中,普通对象跨线程如何传递

威哥爱编程

HarmonyOS HarmonyOS NEXT HarmonyOS5.0

AI Agent:软件测试自动化的新纪元

测试人

软件测试

数据分析经典案例重现:使用DataWorks Notebook 实现Kaggle竞赛之房价预测,成为数据分析大神!

阿里云大数据AI技术

大数据 数据分析 数据可视化 Dataworks 特征分析

妙啊!VSCode Python 终端环境隔离的背后原理

秃头小帅oi

像素间距小型化趋势明显,将加速LED小间距市场发展

Dylan

技术 LED显示屏 led显示屏厂家 户内led显示屏 市场

IT运维大侠的秘密武器-堡垒机简单介绍

行云管家

堡垒机 IT运维 运维‘

论文解读 | OS Agents: A Survey on MLLM-based Agents for General Computing Devices Use

OSAgentSurvey

智能体 GUI 大语言模型 多模态大模型 论文解读

内置大语言模型的绿联AI NAS私有云存储惊艳CES,酷睿Ultra为AI算力保驾护航

E科讯

对话4位技术大咖,探秘华为开发者空间打破壁垒,实现跨平台协作

华为云开发者联盟

医学影像软件的开发流程

北京木奇移动技术有限公司

医学影像 软件外包公司 webgl开发

英伟达首席工程师Corey: HNSW+CPU过时了!GPU+RAPIDS cuVS才是向量检索最优解

Zilliz

gpu cpu 英伟达 向量检索 Milvus

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