SOA中翻译层的替代方案:WCF

3

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

请发表您的评论,是否应该在SOA和OOAD之间进行这种过渡。当我们拥有SOA时,我们应该避免使用OOAD还是使用这种映射技术?

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

AutoMapper生成“操作特定DTO”还是“从领域中没有行为的DTO”?

注意:可以在“不要在设计中使用抽象基类;但在建模/分析中使用”的答案中参考操作特定DTO方法。

摘自服务层指南

设计转换对象,以在业务实体和数据合同之间进行翻译。

参考资料

  1. 如何根据用户角色限制Web服务数据合同属性
  2. SOA问题:公开实体
  3. 在SOA应用程序中使用DTO的最佳方法是什么?
  4. WCF消息和数据合同,DTO,领域模型和共享程序集

替代什么?你在这里试图解决什么问题? - Oded
@Oded。替代“翻译层”方法 - LCJ
2个回答

4
与软件开发中的其他方面一样(尤其是架构),这些问题并没有单一的正确答案。它取决于架构目标和约束条件。
WCF与DTO一起工作。虽然可以降级到更原始的层次并直接使用消息进行工作,但就所有实际情况而言,DTO是使用WCF的基本部分。由于在这种情况下WCF似乎是架构约束之一,因此实际上没有可避免使用DTO的方法。
然后问题就变成了:是否应该有映射层?
如果我们能回答另一个问题:从什么映射?
如果您已经有现有系统,则需要在现有系统和WCF边界之间进行转换。在这种情况下,需要一个翻译层。
如果您正在构建完全新的系统,也许不翻译会更容易。

谢谢。基于您上次的评论,我根据您的建议发布了一个问题 -“如果您正在构建全新的系统,也许不翻译会更容易。” 您能否回答 http://stackoverflow.com/questions/9498962/contract-first-soa-designing-business-domain-wcf ? - LCJ
2
@Lijo:我认为Mark的意思是,如果你的整个系统的目的就是通过WCF公开某些信息,那么你可以设计你的系统,使得数据层实体直接模拟你希望传递到和从服务中传递的值。如果你的系统有各种其他职责,你可能只想通过WCF服务公开其中的一小部分数据。 - StriplingWarrior

1

看看Automapper,我们正在使用它来完成相同的任务。


谢谢。虽然它会自动化这个过程,但是它将有专门处理翻译的代码任务。是否使用翻译或完全忘记面向对象分析与设计都是一个好的实践呢? - LCJ
个人而言,我喜欢将翻译“掌控”在自己手中。我们在服务中公开的“实体”将由Automapper从服务消耗的源数据类型(即其他实体)转换而来。这使我们能够对输出进行细粒度控制,同时保持编译时类型检查。 - Arie van Someren
AutoMapper会生成“特定操作的DTO”还是“没有行为的领域DTO”? - LCJ
2
AutoMapper只负责映射,不会创建DTO类 - 这是您的职责。这意味着您可以决定DTO是否包含原始实体的所有、大部分或仅部分字段。 - John Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接