我正在考虑使用DTO而不是传递我的域对象。我在这里和其他地方都读过几篇文章,我知道有几种方法可以做到这一点。
如果我总共只有10个域类,并且考虑到我希望在视图(WPF前端)中使用DTO而不是域对象,那么推荐的方法是什么?我认为使用像automapper之类的工具对于我的情况来说可能是一种过度的杀伤力。因此,我正在考虑编写我的自定义映射器类,该类将具有将域类型转换为DTO类型的方法。
做这件事最好的方法是什么,有没有可以让我开始做这件事的样本?
第二个问题:在编写那些将创建DTO的方法时,我如何处理设置所有数据,特别是当域类型引用其他域对象时?我是否要在DTO中编写等价的属性,以便映射到域类中的那些引用类型?请询问我是否没有用恰当的语言表达我的第二个问题。但我想你明白我想问什么。
第三个问题:在编写DTO时,我应该编写多个DTO,每个DTO包含给定域模型的部分数据,以便每个DTO都可以用于满足特定视图的需求,还是DTO应该包含相应模型类中的所有数据。
发布于 2011-08-26 02:21:07
我在这里读了一些关于ViewModel的帖子,在我看来,很多人把它们等同于我认为的DTO。DTO就是数据传输对象--它是通过网络传递的对象。所以我已经有了一个网站和服务,只有服务才能访问真实的域/实体对象,并返回DTO。这些可能是1:1的映射,但考虑到DTO可能是从另一个服务调用、数据库查询、读取配置中填充的。
在此之后,网站可以获取这些DTO,并将其添加到ViewModel中,或者转换为DTO。该ViewModel可能包含许多不同类型的ViewModel。任务管理器就是一个简单的例子--DTO既包含您正在编辑的任务对象,也包含一组可以分配任务的Dto.User对象。
请记住,返回DTO的服务可能既被网站使用,也可能被平板电脑或手机应用程序使用。这些应用程序将具有不同的视图来利用它们的显示,因此ViewModels将不同,但DTO将保持不变。
无论如何,我喜欢这些类型的讨论,所以任何人请让我知道你的想法。
哑光
发布于 2009-09-06 14:26:45
我在一个项目中使用了DTO。我倾向于进行DTO,只是为了显示指定视图所需的数据。我在数据访问类中获取视图中显示的所有数据。例如,我可能有一个引用Client对象的Order对象:
public class Client{
public int Id{get;set;}
public string Name{get;set;}
}
public class Order{
public int OrderID{get;set;}
public Client client{get;set;}
public double Total{get;set;}
public IEnumerable<OrderLine> lines {get;set;}
}然后在我的OrderListDTO中,我可能会有这样的东西:
public class OrderListDTO{
public int OrderId{get;set;}
public string ClientName{get;set;}
...
}这是我想要在视图中显示的字段。我在我的数据库访问代码中获取所有这些字段,所以我不必在我的视图或控制器代码中为实体关联而烦恼。
发布于 2017-03-13 00:23:29
开发DTO的最佳方式:
开始开发DTO的方法是理解它们的唯一目的是将业务实体的数据子集传输到不同的客户端(可以是UI或外部服务)。考虑到这一点,您可以为每个client...and创建单独的包,编写您的DTO类。对于映射,您可以编写自己的映射器,定义要传递给工厂的接口,以创建DTO对象,并根据这些数据从要为其创建DTO的实体中提取数据。您也可以定义要放置在实体字段上的注释,但就个人而言,考虑到所使用的注释数量,我更喜欢接口方式。关于DTO需要注意的主要事情是,它们也是类,DTO中的数据应该被重用,换句话说,尽管为每个用例创建DTO似乎很诱人,但尝试重用现有的DTO可以最大限度地减少这种情况。
快速入门
关于入门,如上所述,DTO的唯一目的是向客户端提供它needs....so的数据,请记住,您可以使用setters...or将数据设置到数据中定义一个工厂,该工厂基于接口从实体创建dto .....
关于您的第三个问题,请按照客户的要求进行操作:)
https://stackoverflow.com/questions/1385710
复制相似问题