写点什么

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

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

关注

评论

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

小程序容器技术让混合App开发效率提升

Geek_99967b

小程序容器

如何系统学习web前端技术知识

小谷哥

StarRocks 成都见!企业如何打造极速统一的数据分析新范式,助力业务全方位升级

StarRocks

数据库 大数据 数据分析 国产数据库

在线多行文本批量正则替换添加后缀工具

入门小站

工具

日志黑名单,真的能帮你省钱!

观测云

转行前端是自学好还是培训班好

小谷哥

ArkUI路由跳转概览

坚果

HarmonyOS OpenHarmony 7月月更

Python 入门指南之标准库浏览 – Part II

海拥(haiyong.site)

7月月更

Python3详细的数组基础操作-入门必备[列表的操作]

迷彩

数组 Python基础 列表 7月月更

C 语言入门(四)

逝缘~

7月月更

《Linux设备驱动开发详解》读书笔记

贾献华

7月月更

Web安全之Java反序列漏洞总结

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

Python|制作词云,改变词云字体颜色

AXYZdong

Python 7月月更

如何系统进行学习web前端开发工程师技术

小谷哥

开鸿智谷 Niobe 407 正式并入OpenHarmony代码主干

科技汇

泰凌微电子B91通用开发板合入OpenHarmony社区主干

科技汇

Java 集合

Damon

7月月更

哪个年龄段学习web前端培训比较好

小谷哥

还不了解进程吗?就这一篇!

C++后台开发

网络编程 进程 通信 linux开发 C++开发

Chrome实现自动化测试:录制回放网页动作

和牛

测试

新一代云原生消息队列 (二)

技术小生

pulsar Apache Pulsar 消息系统 7月月更

在线SQL转XML工具

入门小站

工具

融云 x 天聊,用声音打造「无压力社交」栖息地

融云 RongCloud

Kubernetes入坑篇

青柚1943

Kubernetes DevOps minikube

新书上市 | C 语言经典教材配套“习题解答”,原书累计印数 10 万 +

图灵教育

C语言

本周四晚19:00知识赋能第3期直播丨OpenHarmony智能家居项目之控制面板功能实现

OpenHarmony开发者

Open Harmony

AIOps落地五大原则(三):架构路线

BizSeer必示科技

人工智能 AIOPS

重磅发新 | 尚硅谷C4D三维设计实战教程发布

小谷哥

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