QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

博睿数据登顶中国应用性能管理及可观测性APMO市场份额第一!

博睿数据

APM 可观测性 IDC

风霜雨雪总关情:气象局如何推进实时数据在环境和气候科学的应用实践,让气象数据供得出、流得动、用得上

tapdata

实时数据集成 mongodb聚合计算 气象数据 气象数据平台

探索 Meme 项目 GAGA:2024 年新的万倍前瞻,助你走向巅峰

股市老人

企业云盘推荐:11款主流网盘优劣势分析

易成研发中心

产品管理和项目管理有哪些不同的工作重点?

爱吃小舅的鱼

项目管理 产品管理

Python库版本检查:简单步骤全掌握

幂简集成

Python

大国重器 数智领航——用友助力核工业迈向高质量发展新征程

用友BIP

探索Bash编程:开启自动化脚本的魔法之旅

测试人

软件测试

淘宝 1688 API 接口助力构建高效跨境独立站系统

tbapi

淘宝代购集运系统 外贸独立站 反向海淘系统 跨境独立站

2024年最佳公司网盘:口碑爆棚的10款工具盘点

易成研发中心

施工管理工具如何选?9款实用软件推荐

爱吃小舅的鱼

施工管理工具

更聪明、有感情、有态度:数字人助力企业创新营销力、生产效率双提升

科技热闻

天润融通活动预告丨走进上汽集团,探秘数智标杆

天润融通

亚马逊云科技宣布新推出Elasticahe for Redis的 Valkey缓存

伊克罗德信息科技

深度学习怎么选"炼丹炉"

Finovy Cloud

深度学习 云电脑 云电脑平台 云电脑云桌面

OpenTelemetry 赋能DevOps流程的可观测性革命

乘云数字DataBuff

DevOps 运维 OpenTelemetry

避免赛事版权风险!开发合法获取赛事内容体育直播平台

软件开发-梦幻运营部

2024年企业云盘推荐:十大实用工具解析

易成研发中心

企业网盘选择推荐:2024年十大网盘产品排行榜

易成研发中心

量化训练及精度调优经验分享

地平线开发者

自动驾驶; 算法、

易点天下受邀出席甲骨文中国创新峰会 共探AI加速中企高质量出海

新消费日报

选择支持在线编辑的企业网盘,看看这些主流5款

易成研发中心

数智化背景下审计行业的变革与应对之策

不在线第一只蜗牛

低代码 数智化

深入分析2024年文档管理系统排名:十大工具对比

易成研发中心

网盘企业版哪个好用?盘点8款适合企业使用的网盘

易成研发中心

深度盘点:国内7大企业网盘私有化部署厂商

易成研发中心

实现高效运行管理:如何使用 NSSM 工具将 IoTDB 注册为 Windows 系统服务

Apache IoTDB

Spring事务传播机制(最全示例)

快乐非自愿限量之名

spring

用友BIP超级版:释放数据要素价值,加速企业决策智能化

用友BIP

天润融通“AI破局 • 聚力增长”主题论坛圆满收官

天润融通

新业财税资档一体化:全面营运资金管理就选用友BIP超级版

用友BIP

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