c# – 什么推动了数据传输对象的设计?

我正在写一个网络服务.我也在写一个使用这个Web服务的Web客户端.我经历了尝试通过线路发送域对象的一些痛苦(循环引用,延迟加载等 – 参见例如Davy Brion’s post on why it’s a bad idea).所以,我将使用DTO在这两层之间进行转移.

由于负责两端,我能够控制DTO的设计.现在我想知道,是什么推动了DTO的设计?它是客户端的用户界面吗?我是否根据客户端的视图/屏幕创建DTO?或者服务方面应该规定我发出的DTO合同,而客户必须处理它给出的内容?

最佳答案:

设计您的DTO可能是一项艰巨的任务,尤其是因为有许多问题发挥作用.通常,性能注意事项可能会阻止您从UI中完全抽象化.假设您有相同对象的多个UI表示,例如树,网格和细节窗格.根据您实际显示的内容,每个属性都需要不同的属性子集.您可以设计一个公共DTO来包含所有这些属性的并集,但构建这样的DTO,从存储加载数据并通过线路传输数据可能会很昂贵.您最终可能会传输包含大量数据的富对象图,以便在UI中显示对象的名称.

另一方面,如果你在每个UI上下文中使用DTO,你很快就会遇到一个类爆炸问题,它有数百个DTO代表几乎相同的对象,并略微修改了属性子集.重用代码和可读性会受到影响,从长远来看可能会变得无法管理.

由于没有灵丹妙药,它需要一种敏感的方法,您可以在性能和其他方面之间找到​​妥协,每个Domain对象最多可以使用3种不同的DTO类型,并在不同的上下文中重用它们.

上一篇:c# – 这是DTO的正确使用吗?


下一篇:记录用户操作字段变更实现方法(写于除夕,西西)