我应该在哪里放置功能来转换类型?

时间:2012-03-07 14:29:37

标签: c# .net oop c#-4.0

我在应用程序中有两个实例,我需要实现将对象从一种类型转换为另一种类型的功能。一个从域对象转到另一个域对象,另一个从域对象转到XmlDocument。

我最初设置的方式是分别在ToXml()ToMyOtherDO()中加入DomainObject1DomainObject2

ToXml中的功能并非真正特定于DomainObject1的实现,并且可能存在于任何地方。 ToMyOtherDO()具有非常特定于其所处类型的功能。两者都执行类型转换,但却完全不同。

我的问题是,我是否已将此功能放在正确的位置?将此功能更好地放在辅助类中吗?或者其他一些地方 - 可能会覆盖显式的转换操作符?

4 个答案:

答案 0 :(得分:4)

我通常喜欢在extension methods中添加此类功能。

编辑解释
我通常更喜欢将这种功能放在扩展方法中,因为我觉得需要“转换”的类确实需要知道如何进行转换。这提供了一些解耦。您可以轻松更改XML的格式,而无需更改要转换为XML的对象(当要转换的对象位于单独的程序集中时尤其有用)。

您最终会遇到想要将域对象转换为其实际不需要了解的内容的情况。例如,您可能希望将域对象转换为Json.NET JObject。如果您使用扩展方法在单独的程序集中处理转换,则包含域对象的程序集将不需要对Json.NET库的引用。

扩展方法非常好,特别是在处理实体框架时。实体类的代码是自动生成的,因此您不能只在类中添加ToXML()ToJObject()

这些只是我的偏好,我不总是使用扩展方法来处理这种功能。这只是你的武器库中另一个很好的工具,可以解决这些问题。

答案 1 :(得分:0)

我会将它作为扩展方法放在静态类中。通过这种方式,您可以像实例方法一样调用它,但它不会使您的域对象的代码混乱。

答案 2 :(得分:0)

ToXml()函数应放在辅助类中,如果它不是特定于对象的。

我建议将ToMyOtherDO()实现为类的扩展方法,因为它是特定于它的。

public void ToMyOtherDo(this MyClass object1)
{
    //Do stuff to object1
}

然后您就可以调用myobject.ToMyOtherDo()(将myobject视为MyClass对象)

答案 3 :(得分:0)

如果ToXml不是特定于类型的类型,我会像blachniet和其他人建议的那样做,并将其放在扩展方法中。

如果ToMyOtherDO仅使用公共成员,那么扩展方法就是一个好地方。但是,如果ToMyOtherDO需要私有成员,则它必须是从中转换的类型。