DTOs: best practices

18 dto

I am considering to use DTOs instead of passing around my domain objects. I have read several posts here as well as elsewhere, and i understand there are several approaches to getting this done.

If i only have about 10 domain classes in all, and considering that i want to use DTOs rather than domain objects for consumption in my Views (WPF front ends), what is the recommended approach. I think using tools like automapper etc maybe an overkill for my situation. So i am thinking of writing my custom mapper class that will have methods for converting a domain type to a DTO type.

What is the best way to do this, are there any sample to get me started to do this?

第二个问题:在编写那些将创建DTO的方法时,我如何处理设置所有数据,特别是当域类型引用其他域对象时?我是否在DTO中编写等效属性以映射到域类中的那些引用类型?请问我是否没有用正确的话说出我的第二个问题.但我想你明白我想问的是什么.

第三个问题:在编写DTO时,我应该编写多个DTO,每个DTO包含给定域模型的部分数据,以便每个DTO都可以用于满足特定View的要求,或者DTO是否应该包含所有数据在相应的模型类中.

Mat*_*ker 8

我一直在这里阅读有关DTO的一些帖子,在我看来,很多人将它们等同于我认为的ViewModel.DTO就是这样,数据传输对象 - 它是传递给网络的东西.所以我有一个网站和服务,只有服务可以访问真实的域/实体对象,并返回DTO.这些可以映射1:1,但考虑到DTO可以从另一个服务调用,数据库查询,读取配置填充 - 无论如何.

之后,网站可以将这些DTO添加到ViewModel中,或者转换为一个.ViewModel可能包含许多不同类型的DTO.一个简单的例子是任务管理器 - ViewModel包含您正在编辑的任务对象,以及可以分配任务的一组Dto.User对象.

请记住,返回DTO的服务可能被网站,平板电脑或手机应用程序使用.这些应用程序将有不同的视图来利用它们的显示,因此ViewModel会有所不同,但DTO将保持不变.

无论如何,我喜欢这些类型的讨论,所以任何人都应该让我知道你的想法.

马特


Mar*_*ore 0

我将假设您的域模型对象有一个主键 ID,该 ID 可能与它们来自的数据库或存储中的 ID 相对应。

如果上述情况成立,那么您的 DTO 将克服对其他 DTO 的类型引用,就像您的域对象一样,以外键 ID 的形式。因此,域对象上的 OrderLine.OrderHeader 关系将是 DTO 中的 OrderLine.OrderHeaderId。

希望有帮助。

我能问一下为什么您选择在视图中使用 DTO 而不是丰富的域对象吗?

  • DTO 中可以有 ID 属性吗?- 即样本中的 OrderlineID。我认为 DTO 是完全独立的数据对象,不会对数据库和其他外部依赖项有任何引用。至于为什么使用 DTO,我的项目将来会演变成一个大型系统,我想确保我现在构建它以坚持能够在未来通过 Web 服务请求等公开数据。我想 Beeter 从第一天起就遵循良好的做法。您对我的第三个问题(我在几分钟前添加的)有任何想法吗? (2认同)