实施 DTO 的最佳方式是什么?

我的理解是它们是在对象之间传输数据的一种方式。例如,在 ASP.Net 应用程序中,您可以使用 DTO 将数据从代码隐藏发送到业务逻辑层组件。

其他选项怎么样,例如仅将数据作为方法参数发送?(在需要发送的数据较少的情况下,这会是最简单的吗?)

一个只保存数据、可以被其他对象引用的静态类(一种全局汇编数据存储类)怎么样?(这是否太破坏封装性了?)

每次传输都使用一个通用 DTO 怎么样?使用起来可能有点麻烦,但减少了需要使用的类的数量(减少了对象的混乱)。

感谢您分享您的想法。

有帮助吗?

解决方案 6

感谢所有有益的想法......

一个摘要+我采取在此:

- 如果是移动和不太多的地方移动它的数据量小,定时参数可能就足够了

- 如果有大量的数据和/或许多对象要移动到,一个专门创建的对象可以是最简单的(DTO对象)

- 这可以通过各种对象引用(而不是通过)全球数据对象似乎就被皱着眉头......不过,我不知道是否有有时没有特定的子系统内为它的地方?这是减少数据传递量的一种方式。它不会推动“良好的封装”的限制,但在特定的图层中的特定情况下,也许它可以添加简单性的班particluar assemply。因此,人们会失去类级封装,但是仍然可能产生汇编级封装。

其他提示

我使用 DTO 来:

  • 在标准 3 层应用程序的 UI 和服务层之间传递数据。
  • 将数据作为方法参数传递以封装大量(5+)参数。

“一个 DTO 统治所有”的方法可能会变得混乱,最好的办法是为每个功能/功能组使用特定的 DTO,并注意命名它们,以便它们很容易在所使用的功能之间进行匹配。

我从未以您提到的方式见过静态 DTO,并且会犹豫是否创建像您描述的那样的 DTO 单例。

我保持它的简单和一个映射类DTO到一个数据库表。它们重量轻,所以我可以到处给他们,包括在电线。

我希望它可以是简单。虽然DTO起源由于网络系统的分布层可以有问题的整个负载,如果域对象返回查看层。下面是其中一些的:

1.By暴露域对象查看层,视图意识到域对象的结构,它可以让视图使得约一些假设对象如何相关可用。例如,如果一个域对象“人”被retunrned到的视图,其是“结合”和一些其他的观点,“地址”人的是被束缚,将有用于应用程序层的倾向使用语义像person.getAddresse(),因为在这一点上的地址域对象,woukd失败可能还没有被点加载。从本质上说,随着越来越可用的域对象的视图层,视图可以随时对如何数据可假设。

2)时域对象被绑定到视图(更多的是在厚客户端),将有alwyas对于查看中心逻辑内这些对象使它们逻辑损坏蠕变倾向。

基本上从我的经验,我已经看到,让域对象可查看创建架构问题,但有问题与使用DTO的也因为使用DTO的创作汇编的方面产生额外的工作(DTO域对象和反向)一样病人域对象,患者DTO和结合,以查看也许病人豆类似对象的增殖的影响。

显然,还有在胖客户端系统,用于此特别不正确的答案。

我借这短暂的,不完整的,但真正的答案DTO老生常谈来源:点击 http://www.theserverside.com/discussions/thread.tss?的thread_id = 32389#160505

我觉得这是很常见的是使用的DataSet / DataTable中的“一个DTO来统治他们。”可以很容易地从数据库加载它们,并持续值回,并且它们可以被容易地进行序列化。

我肯定会说,他们使用起来更麻烦。他们提供所有的管道,但是编程对他们来说是一个痛苦(大量铸造,null检查,魔术字符串等)。看到一套良好的扩展方法,使与他们一起工作会很有趣多一点“自然”。

DTO的用于通过网络发送数据,而不是对象之间。看看这篇文章: POCO VS DTO

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top