使用WCF服务共享域模型

kai*_*lya 8 .net c# wcf web-services

将我的Web应用程序域图层类库引用到WCF服务应用程序是一种好习惯.

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

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

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

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

Dan*_*ger 2

我个人不赞成直接通过 WCF 直接传递域对象。正如 Krzysztof 所说,它是关于数据契约的,而不是关于您通过网络传递的事物的行为的契约。

我通常这样做:

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

抛开“数据契约”的概念纯粹性不谈,如果您开始传递实体,那么您正在设置共享实体,以便在 WCF 边界的每一侧拉入不同的设计方向。不可避免地,您最终会得到只属于一侧的行为,甚至更糟 - 必须公开在概念上执行相同操作但以不同方式为 WCF 边界的每一侧执行相同操作的方法。从长远来看,它可能会变得非常混乱。