在业务对象和DTO之间共享内容

时间:2010-06-28 10:39:43

标签: c# wcf design-patterns dto

所有

我对中型WCF服务的典型方法是:

  1. 使用WCF数据协定和服务操作定义接口。数据合同将是POCO DTO,没有CRUD或域逻辑。
  2. 使用功能齐全的业务对象为域建模。
  3. 提供从DTO到BO的一些机制,反之亦然(参见相关问题:Pattern/Strategy for creating BOs from DTOs
  4. 现在,很多时候(如果不总是)业务对象和DTO的数据内容几乎相同。人们如何看待创建由BO和DTO共享的内容对象库。例如。如果我们有一个WibbleDTO和一个WibbleBO,我们可以创建一个IWibbleContent接口,它们都可以实现。我们甚至可以创建一个IWibbleContent接口和一个WIBbleContent类,DTO和BO都持有这个类。

    所以,具体问题:

    1. 您是否曾在DTO和BO之间共享内容/数据接口?
    2. 您是否曾在DTO和BO之间共享数据内容类?
    3. 如果没有,那么我想,根据我的相关问题,我们留下了繁琐的复制代码,或者我们使用类似AutoMapper的东西。

      任何评论都表示赞赏。

2 个答案:

答案 0 :(得分:2)

我们正在使用与您使用DTO和BO描述的非常类似的方法。

我们很少有通用接口,要么它们非常基本(例如,获取BusinessId的接口),要么它们特定于某个实现,例如。可以在客户端或服务器上进行的计算。

我们实际上只是复制属性。它们通常是微不足道的,因此不值得共享代码。

最后,更多代码与之类似。

  • 我们在这些类上有很多属性,几乎从不相同。
  • 大多数属性在服务器上实现为get; set;,但在客户端上使用OnPropertyChangedEvent,这需要使用显式字段。
  • 我们在客户端和服务器端共享的代码不多。所以不需要通用接口。

即使两个类中的许多属性都相同,实际上也没什么可分享的。

答案 1 :(得分:0)

我通常会创建POCO并通过我的所有图层使用它们 - 将数据访问到ui的业务。在业务层,我有经理人来回调整POCO。我们将查看实体框架和/或NHibernate,因此我不确定它将在何处引导我们。

是的,我们写了一些额外的代码,但我们保持一切精益和意味着。我们正在使用MVC作为我们的UI,对于我而言,与大量的webforms相比,我是一个天赐之物,我永远不会回头。现在我们的战斗是我们应该将JSON发送到ajax回调还是使用部分视图,后者是我们大部分时间都在做的事情。

我们是否正确?也许不是,但它对我们有用。这么多的选择,很少的时间。