2

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

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

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

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

谢谢

更新:

似乎共识是创建您自己的自定义类,而不是依赖于 WCF 创建的那些。

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

拥有自己的更简单的类对可扩展性和其他东西有好处:)

4

3 回答 3

1

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

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

使用 DLL 的缺点:

  1. 你会有额外的参考
于 2012-02-22T14:01:06.697 回答
0

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

于 2012-02-22T14:00:50.113 回答
0

最好像在当前项目中那样拥有一个单独的 dll - 解耦是一种最佳实践,但是从数据库生成 WCF DataContracts 几乎肯定不是一个好主意 - 它可以用于第一次拍摄,但随后更改为您的数据库不应直接反映在 Web 服务中。

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

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

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

于 2012-02-22T14:26:01.390 回答