服务不是面向对象的。假设我有一个基于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方法设计在业务实体和数据合同之间转换的转换对象。
参考:
答案 0 :(得分:4)
与软件开发中的所有其他内容(尤其是架构)一样,这些问题没有一个正确的答案。这取决于架构目标和约束。
WCF适用于DTO。虽然可以下拉到更原始的层并直接处理消息,但对于所有实际问题,DTO是使用WCF的基本部分。由于在这种情况下WCF似乎是架构约束之一,因此实际上没有可行的方法来避免DTO。
那么问题就变成了:是否应该有地图图层?
如果我们可以回答另一个问题,那么这个问题很容易回答:从什么映射?
如果您已有现有系统,则需要在现有系统和WCF边界之间进行转换。在这种情况下,需要翻译层。
如果您正在构建一个全新的系统,也许更容易翻译。
答案 1 :(得分:1)
查看Automapper,我们将其用于同一任务。