我有一系列不同的对象类型(大约15种不同类型),它们来自第三方系统。 对于每种类型,我需要进行不同的转换。 我最初的想法是使用转换函数创建一些接口,并为每个类型创建一个类并运行它自己的实现。 但是像这样我需要创建一个非常大的if语句来检查对象类型并进行映射。
我正在尝试在这里学习一些新东西,所以我的问题是还有其他方法来处理这种情况吗?
答案 0 :(得分:2)
您是否考虑过使用Visitor的可能性?
如果将访问者模式与dynamic
的使用结合起来,您可以在没有任何if
或switch
语句的情况下获得非常简单的实现,或者必须手动创建类型字典代表或类似的替代方案。
使用dynamic
可以避免实现设计模式的“ accept ”部分,我认为这对您有用,因为这些是您无法控制的外部类型。
意思是,你创造了这样的东西:
public interface IVisitor
{
void Visit(OneType element);
void Visit(AnotherType element);
....
}
您实现该访问者,稍后可以使用以下方法调用该实现:
visitor.Visit((dynamic)objectToTransform);
您可能必须处理有关Type
没有适当重载的例外情况。
这将解决与为每种类型执行单独方法相关的问题部分。 现在,根据您对每个特别需要做的事情,如果您需要自动属性映射,那么AutoMapper可能非常有用。
答案 1 :(得分:0)
您可以创建类型和转换的查找,类似于Java Front Controller pattern.
答案 2 :(得分:0)
我不确定这是否是您想要的,但请查看AutoMapper(或其他地图制作者)。它允许您轻松定义规则以将类型映射到其他类型。