我正在构建 WCF 服务。
数据契约对象将与业务对象完全相同。
我应该在我的 WCF 服务中创建数据契约还是引用我的 BO 层并在我的 WCF 操作中使用这些业务对象?
我正在构建 WCF 服务。
数据契约对象将与业务对象完全相同。
我应该在我的 WCF 服务中创建数据契约还是引用我的 BO 层并在我的 WCF 操作中使用这些业务对象?
我会将它们分成不同的项目:
参考服务中的业务模型和数据合同。然后使用AutoMapper将模型类映射到契约类,反之亦然。然后,您可以在不破坏 WCF 客户端的情况下更改模型,因为它们依赖于合同。
我认为在@valpolushkin 的同一行中,尽管我直到现在还没有使用过 AutoMapper。
在WCF 消息和数据协定、DTO、域模型和共享程序集中查看我的答案了解使用业务实体作为数据合同可能导致重大更改的示例。
我认为,将业务对象用作数据合同是一种非常糟糕的做法。服务需要是自治的。该服务可能被拥有/没有获得 Lax 版本控制的客户端使用。
请参阅服务版本控制。
很容易错误地认为添加新成员不会破坏现有客户。如果您不确定所有客户端都可以处理宽松的版本控制,建议使用严格的版本控制指南并将数据合约视为不可变的。
另外,请参阅MSDN - 服务层指南
设计在业务实体和数据合同之间转换的转换对象。
如果您的业务对象可以被序列化,而不会将序列化的关注点与业务逻辑混淆,那么我会说去吧。
不过,更好的选择是将您的业务逻辑层置于服务层之后,并从您的视图可以绑定到的服务中公开简单的 DTO。
我用WCF RIA 服务写了一篇关于这种方法的文章,它可以很好地转换为标准的 WCF Web 服务