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