什么';s使用WCF生成的类与创建自己的模型dll的优缺点

本文关键字:创建 模型 优缺点 dll 自己的 使用 WCF 什么 | 更新日期: 2023-09-27 18:25:30

到目前为止,我的项目严重依赖于链接到数据库的WCF。如果您想在我们的系统中进行处理,我们将使用从数据库生成的类,这些类是ORM。

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

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

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

感谢

更新:

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

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

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

什么';s使用WCF生成的类与创建自己的模型dll的优缺点

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

  1. 随着服务的增长,用户在尝试生成服务引用时可能偶尔会超时
  2. 您将不会受到有错误服务参考的人的伤害。当生成服务引用时,一些属性可以更改,因此用户可以生成潜在的死服务引用
  3. 您将受到保护,避免其他IDE生成略有不同的引用
  4. 向后兼容和确定问题更容易,因为您可以100%确定客户端的使用方式在不同用户中是相同的

使用DLL的缺点:

  1. 您将有其他参考资料

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

最好像在当前项目中那样有一个单独的dll-解耦是一种最佳做法,但从数据库生成WCF DataContracts几乎肯定不是一个好主意-它可以用于第一次尝试,但对数据库的后续更改不应直接反映在web服务中。

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

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

另一方面,像这样的解耦提前实现有点慢,所以如果你有一个非常小的项目,可能会被高估——但如果你是跨团队或以任何方式分布式工作,那么这是至关重要的。