早期绑定类的用法

时间:2011-12-07 19:19:47

标签: c# dynamics-crm-4 dynamics-crm-2011 crm

请原谅可能出现的任何刺激。

所以在使用早期绑定类一段时间后,我们的团队已经发现了一些使早期绑定类无用的缺点。

问题:

  • 慢,因为它必须连接到ws并越过http,甚至认为它在与系统其余部分相同的进程中运行。
  • 在插件中附加到CREATE消息时导致sql死锁。
  • 对系统和类的任何轻微更改都需要重新生成并且事情会中断。

那么它们何时有用?关于这个东西的MS文档在哪里?除了如何生成它们之外。

谢谢, 乔恩

2 个答案:

答案 0 :(得分:5)

我们主要使用早期绑定类型进行开发。如果您开发业务逻辑(类型安全,......),它们就有意义。

然而,后期限制方法仍有空间。当我们必须保持通用并且无法预测目标系统的外观时,我们正在使用后期绑定开发。或者,如果您开发了一些可以以多种方式配置的可重用组件(如数字生成器)。

  
      
  • 慢,因为它必须连接到ws并越过http,即使如此   它在与系统其余部分相同的过程中运行。
  •   

在这一点上,早期和晚期编程之间没有区别。将后期实体更新为.Update()并在数据上下文中调用SaveChanges()的区别在哪里?当您在插件中使用早期绑定类时,不必显式调用Web服务。

  
      
  • 在插件中附加到CREATE消息时导致sql死锁。
  •   

这不是由早期绑定类型引起的。这种行为还有其他原因。

  
      
  • 对系统和类的任何轻微更改都需要重新生成并且事情会中断。
  •   

我也不能同意这一点。有一个班级

之间的区别在哪里
Account.Foo = "some data here";

或使用实体

Entity["new_foo"] = "some data here";

如果您在new_foo处进行了更改,则必须使用早期和晚期绑定类来处理这些更改。但是,如上所述,如果您不知道使用早期绑定类的目标环境,则在生成的属性引用的字段不可用时可能会导致问题。

答案 1 :(得分:4)

早期的约束有它的位置。我们在webservice teirs中使用它。它使得开发迭代更加快速(例如,所有内容都是强类型的,因此以魔法字符串为中心的调试较少。)

你提到了:

  

•对系统和类的任何轻微更改都需要重新生成并且中断。

这实际上是早期绑定的用例。在后期,您更倾向于坚持在运行时而不是在编译时才会注意到的重大更改。在编译时修复可以节省能源。

您还提到了:

  

•在插件中附加到CREATE消息时导致sql死锁。

在我看过的所有插件示例中,后期绑定是事实上的标准。在我看来,你不会想要创建那么多的东西(特别是如果你正在生成所有实体)在一个轻量级模块(如插件)中徘徊。从调试的角度来看,Execute方法中应该覆盖的地理位置要少得多。如前所述,这减轻了早期约束的主要原因。

因此,如果您正在调用系统外的实体(例如在ESB或其他一些此类商业领域),那么早期约束是可行的方法。

这完全取决于我过去几个月在开发的经验。你的milage可能会有所不同。