NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

华为阅读“WebBrain搜索”和“知识图谱”在HDC2022首次亮相!

叶落便知秋

卷积模型分类图片

智趣匠

Python 卷积网络 11月月更

网易云信智码超清转码技术实践

网易云信

音视频开发

前行不缀 未来可期,鸿蒙生态发展迈入全新阶段

OpenHarmony开发者

OpenHarmony

docker 部署 apache 做反向代理

非晓为骁

Apache Docker 反向代理

应用防火墙WAF架构分类

阿泽🧸

waf 11月月更

使用 apache 给前后端服务做反向代理

非晓为骁

Apache 反向代理

阿里低代码引擎怎么样,好不好用?

优秀

低代码

微服务先等等,我去刷个“虚拟背景”的副本

为自己带盐

虚拟背景 11月月更 trtc

深扒:基于UEBA的数据使用安全防护

极盾科技

SQL Sever 提供的数字类型

乔乔

数据库 11月月更 SQL sever

Vue组合式函数(一)

Augus

vue.js 11月月更

九科信息荣获《2022爱分析RPA厂商全景报告》RPA软件市场代表厂商

九科Ninetech

双11就要到了,是时候给你的电脑来点硬货了!

淋雨

数据恢复 OCR 滤镜 录屏 磨皮

赋能信息技术应用创新,需要怎样的可持续性业务架构?

云科通明湖

负载均衡

因热爱而分享!阿里云开发者社区 X InfoQ创作者支持计划发布

阿里技术

新一代 CI 即将到来!

CODING DevOps

ci 持续集成 jenkins

阿里云机器学习平台 PAI宣布集成国产深度学习框架 OneFlow

阿里云大数据AI技术

机器学习 阿里云 oneflow

如何通过Java将PDF转为Excel

Geek_249eec

Excel PDF java;

云科通明湖:金融业务可持续性能力建设,少不了这块“拼图”!

云科通明湖

负载均衡

如虎添翼!微软OneNote迎来新利器!

Jackpop

Mac上有那些你认为极其好用的app?

Jackpop

什么是 NFT 蓝筹项目

NFT Research

区块链 NFT

NB的Github项目,看到最后一个我惊呆了!

艾小仙

Java GitHub

华为发布鸿蒙开发套件 全面加速推进鸿蒙生态

科技汇

产品负责人的轻度思考,6个小策略,面对迭代Sprint评审会

老彦

敏捷 回顾会 产品负责人

如何通俗易懂理解Python类和面向对象?

Jackpop

阿里进入“全面云原生深度用云”阶段 PaaS支出占用云总成本43%

阿里技术

云计算 云原生 云栖大会

概述DDoS分类

穿过生命散发芬芳

DDoS 11月月更

全新升级的鸿蒙开发套件,你想知道的都在这里

HarmonyOS开发者

HarmonyOS

华为高清空间音频将登陆座舱,打造移动“车载大剧院”

最新动态

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