0

我有一系列不同的对象类型(大约 15 种不同的类型),它们来自 3rd 方系统。对于每种类型,我都需要进行不同的转换。我最初的想法是使用转换函数创建一些接口,并为每种类型创建一个类并运行它自己的实现。但是像这样我需要做一个非常大的 if 语句来检查对象类型并进行映射。

我想在这里学习一些新东西,所以我的问题是还有其他方法可以处理这种情况吗?

4

3 回答 3

2

您是否考虑过使用访客的可能性?

如果您将访问者模式与使用结合起来dynamic,您可以获得一个非常简单的实现,而无需任何iforswitch语句,或者必须手动创建带有委托或类似替代方案的类型字典。

使用dynamic你可以避免实现设计模式的“接受”部分,我认为这对你很有用,因为这些是你无法控制的外部类型。

意思是,你创造了这样的东西:

public interface IVisitor
    {
        void Visit(OneType element);
        void Visit(AnotherType element);
        ....
    }

您实现该访问者,稍后可以使用以下方法调用该实现:

visitor.Visit((dynamic)objectToTransform);

您可能必须处理有关没有为Type.

这将解决与为每种类型执行单独方法相关的部分问题。现在,根据您具体需要对每个属性做什么,如果您需要自动属性映射,那么AutoMapper可能非常有用。

于 2012-07-11T06:46:53.780 回答
0

您可以创建类型和转换的查找,类似于Java 前端控制器模式。

于 2012-07-11T06:40:20.693 回答
0

我不确定这是否是您想要的,但请查看AutoMapper(或其他映射器)。它允许您轻松定义将类型映射到其他类型的规则。

于 2012-07-11T06:41:34.387 回答