从WCF操作(服务层到数据层)传递Business Objects

时间:2013-03-22 18:33:11

标签: wcf datacontract business-logic-layer

我正在构建一个WCF服务。

Data Contract对象与Business Objects完全相同。

我应该在WCF服务中创建数据协定还是引用我的BO层并在我的WCF操作中使用这些Business Objects?

3 个答案:

答案 0 :(得分:4)

我会将它们分成不同的项目:

  • Foo.DataContracts
  • Foo.BusinessModels
  • Foo.Services

参考服务中的BusinessModels和DataContracts。然后使用AutoMapper将模型类映射到合同类,反之亦然。然后,您可以在不破坏WCF客户端的情况下更改模型,因为它们依赖于合同。

答案 1 :(得分:0)

如果您的业务对象可以序列化而不会将业务逻辑中的序列化问题弄糊涂,那么我会说它去了。

更好的选择是将业务逻辑层置于服务层后面,并从您的视图可以绑定的服务中公开简单的DTO。

我用WCF RIA Services写了一篇关于这种方法的文章,它很好地转换为标准的WCF Web服务

答案 2 :(得分:0)

我认为在@valpolushkin的同一行中虽然到目前为止我还没有使用过AutoMapper。

请参阅WCF Message & Data Contract, DTO, domain model, and shared assemblies中的答案,了解使用业务实体作为数据合同可能导致重大变更的示例。

我认为,将Business Objects用作DataContracts是一种非常糟糕的做法。服务需要自治。具有/未进行Lax版本控制的客户端可以使用该服务。

参考Service Versioning

  

很容易错误地认为添加新成员不会破坏现有客户端。如果您不确定所有客户端都可以处理松散的版本控制,建议使用严格的版本控制指南并将数据协定视为不可变的。

另请参阅MSDN - Service Layer Guidelines

  

设计在业务实体和数据合同之间转换的转换对象。