Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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生成的类与创建自己的模型dll的利弊是什么?_C#_Wcf_Orm_Datasvcutil - Fatal编程技术网

C# 什么';使用WCF生成的类与创建自己的模型dll的利弊是什么?

C# 什么';使用WCF生成的类与创建自己的模型dll的利弊是什么?,c#,wcf,orm,datasvcutil,C#,Wcf,Orm,Datasvcutil,到目前为止,我的项目在很大程度上依赖于链接到数据库的WCF。 我们使用从数据库生成的类,如果您愿意在我们的系统中进行处理,这些类就是ORM 我知道,使用DataSvcUtil,我们可以轻松地提取出所有类,并将其编译为DLL,以便在其他系统中共享 但是在我们当前的项目中,我们创建了另一个DLL,它镜像WCF生成的表类,而不是直接使用这些类 所以我的问题是,在这类事情上有没有最佳实践 及 这两种方法的优缺点是什么 还有其他的吗 方法 谢谢 更新: 似乎大家的共识是创建自己的自定义类,而不是依赖WCF

到目前为止,我的项目在很大程度上依赖于链接到数据库的WCF。 我们使用从数据库生成的类,如果您愿意在我们的系统中进行处理,这些类就是ORM

我知道,使用DataSvcUtil,我们可以轻松地提取出所有类,并将其编译为DLL,以便在其他系统中共享

但是在我们当前的项目中,我们创建了另一个DLL,它镜像WCF生成的表类,而不是直接使用这些类

  • 所以我的问题是,在这类事情上有没有最佳实践
  • 及 这两种方法的优缺点是什么
  • 还有其他的吗 方法
  • 谢谢

    更新: 似乎大家的共识是创建自己的自定义类,而不是依赖WCF创建的类

    我目前正在使用这个方法,到目前为止,我只使用extension创建方法来转换为模型,并使用另一个方法将其转换回类型


    拥有自己的简单类有利于扩展性和其他方面:)

    我对WCF不太熟悉——但我使用Linq To Sql,我假设它生成相同类型的类(就像任何ORM工具一样)。我总是创建自己的POCO类来描述我的域模型。我知道还需要做更多的工作——然后您就要负责将POCO类映射到生成的类。但是我发现这是保持我的域类纯净的最好方法。生成的类可能有点复杂,其属性描述将用于填充它们的表和列。我喜欢生成的类,因为它们使我更容易与数据库交互——但我总是喜欢将简单的域类分离开来——这也让我能够灵活地交换数据库实现。

    我建议仍然使用WCF,但使用编译的dll作为客户端,而不是服务引用。这样,即使将来决定更改数据库,您仍然可以保持界面的一致性。使用DLL的优点:

  • 随着服务的增长,用户在尝试生成服务引用时可能会偶尔出现超时
  • 您将不会受到有错误服务参考的人的影响。在生成服务引用时,可以更改某些属性,因此用户可以生成潜在的死服务引用
  • 您将受到保护,不受其他生成略有不同引用的IDE的影响
  • 向后兼容和查明问题会更容易一些,因为您将100%确定客户端在用户之间的使用方式是相同的
  • 使用DLL的缺点:

  • 你会有更多的参考资料

  • 最好像在当前项目中一样使用单独的dll—解耦是一种最佳实践,从数据库生成WCF DataContracts几乎肯定不是一个好主意—它可以用于第一个快照,但对数据库的后续更改不应直接反映在web服务中

    使用WCF的一个优点是,您可以轻松地通过服务层实现解耦,如果您要分发按照您描述的方式编译的dll,那么实际上就是将所有客户机耦合到您的数据库表示

    解耦使您的ORM/数据库能够根据需要进行调整,而无需所有客户端重新编译

    另一方面,像这样的解耦在前期的实现上有点慢,所以如果你有一个非常小的项目可能会有点过头,但是如果你是跨团队工作或者以任何方式分布,那么它是必不可少的