SOA中转换层的替代方案:WCF

时间:2012-02-28 11:15:19

标签: .net wcf web-services c#-4.0 soa

服务不是面向对象的。假设我有一个基于OOAD的设计。我们可以使用翻译层将其转换为DTO(没有任何行为)。但这可能会导致代码量的大幅增加。在WCF中有什么替代方案(通过C#)?

请注意,在SOA和OOAD之间进行这样的转换是否是个好主意。当我们拥有SOA或使用这种映射技术时,我们是否应该完全避免使用OOAD?

创建“特定于操作的DTO”而不是在删除行为后直接从域创建“DTO”是一个好主意吗?是否有“特定操作DTO方法”的工具?

AutoMapper是否会生成“特定于操作的DTO”或“没有行为的域中的DTO”?

注意:可以在“Do not use Abstract Base class in Design; but in Modeling/Analysis”

的答案中引用特定于操作的DTO方法

摘自Service Layer Guidelines

  

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

参考

  1. How to restrict web service data contract properties based on user role
  2. SOA Question: Exposing Entities
  3. What is the best way of using DTOs in a SOA application?
  4. WCF Message & Data Contract, DTO, domain model, and shared assemblies

2 个答案:

答案 0 :(得分:4)

与软件开发中的所有其他内容(尤其是架构)一样,这些问题没有一个正确的答案。这取决于架构目标和约束。

WCF适用于DTO。虽然可以下拉到更原始的层并直接处理消息,但对于所有实际问题,DTO是使用WCF的基本部分。由于在这种情况下WCF似乎是架构约束之一,因此实际上没有可行的方法来避免DTO。

那么问题就变成了:是否应该有地图图层?

如果我们可以回答另一个问题,那么这个问题很容易回答:从什么映射?

如果您已有现有系统,则需要在现有系统和WCF边界之间进行转换。在这种情况下,需要翻译层。

如果您正在构建一个全新的系统,也许更容易翻译。

答案 1 :(得分:1)

查看Automapper,我们将其用于同一任务。