使用WCF服务共享域模型

时间:2009-09-23 21:21:10

标签: c# .net wcf web-services

将我的Web应用程序域图层类库引用到WCF服务应用程序是不错的做法。

这样做可以让我轻松访问我的域模型上已有的类,这样我就不需要重新定义WCF服务使用的类似类

另一方面,我不喜欢它在应用程序和服务之间产生的耦合,我很好奇它是否会给我带来长期困难。

我还认为为我的WCF应用程序设置专用类会更有效,因为这些类只包含服务将使用的成员而不包含任何其他成员。如果我使用我的域层中的类,那么类中将有许多字段不会被服务使用,并且会导致不必要的数据传输。

如果你能从你的经历中给我你的想法,我将不胜感激

3 个答案:

答案 0 :(得分:4)

不,不是。实体都是关于行为的。 数据合同就是......数据。另外正如你所提到的,你不想把它们结合在一起,因为它会削弱你很快对变化做出反应的能力。

答案 1 :(得分:4)

对于那些仍然看过这篇文章的人,就像我......

结帐site。这是对这个主题的一个很好的解释。

结论:努力保持您的架构边界清晰。有一天你会得到一些荣誉;)

答案 2 :(得分:2)

我个人对直接通过WCF直接传递域对象感到皱眉。正如Krzysztof所说,这是关于数据合同而不是关于你通过网络传递的行为的合同。

我通常这样做:

  • 在自己的程序集中定义数据协定
  • 该服务引用了数据协定程序集和业务实体程序集。
  • 在服务命名空间中创建扩展方法,将实体映射到相应的数据协定,反之亦然。

将“数据合同”的概念纯度放在一边,如果您开始传递实体,则设置您的共享实体,以便在WCF边界的每一侧拉入不同的设计方向。你不可避免地会遇到只属于一方的行为,甚至更糟糕的是 - 必须公开概念上做同样事情的方法,但是对于WCF边界的每一方以不同的方式。从长远来看,它可能会非常混乱。