Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与WCF服务共享域模型_C#_.net_Wcf_Web Services - Fatal编程技术网

C# 与WCF服务共享域模型

C# 与WCF服务共享域模型,c#,.net,wcf,web-services,C#,.net,Wcf,Web Services,将我的web应用程序域层类库引用到WCF服务应用程序是一种良好的做法 这样做使我能够轻松访问域模型上已经存在的类,这样我就不需要重新定义WCF服务使用的类似类 另一方面,我不喜欢它在应用程序和服务之间产生的耦合,我很好奇从长远来看它是否会给我带来困难 我还认为为我的WCF应用程序提供专用类会更有效,因为这些类只包含服务将使用的成员,而不包含其他内容。如果我使用我的域层中的类,那么类中会有许多字段不会被服务使用,这将导致不必要的数据传输 如果你能根据你的经历告诉我你的想法,我将不胜感激。实体都是关

将我的web应用程序域层类库引用到WCF服务应用程序是一种良好的做法

这样做使我能够轻松访问域模型上已经存在的类,这样我就不需要重新定义WCF服务使用的类似类

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

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


如果你能根据你的经历告诉我你的想法,我将不胜感激。实体都是关于行为的数据合同是关于。。。数据。另外,正如您所提到的,您不希望将它们结合在一起,因为这将削弱您对更改的快速反应能力。

我个人不赞成直接通过WCF传递域对象。正如Krzysztof所说,这是一个关于数据契约的契约,而不是一个关于你们通过网络传递的东西的行为的契约

我通常会这样做:

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

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

对于那些仍然看到这篇文章的人,比如我

看看这个。这是对这个话题的一个很好的解释


结论:努力保持架构的边界清晰和干净。总有一天你会因此获得一些荣誉;)

这是完美的;你会不会碰巧有一个例子或者看到一个例子(链接、博客等)?如果我在实现中看到一个这样的小例子,那么有几个问题可以回答。