C# 我应该在哪里放置在类型之间转换的功能?
我在一个应用程序中有两个实例,需要实现将对象从一种类型转换为另一种类型的功能。一个从域对象转到另一个域对象,另一个从域对象转到XmlDocument 我最初设置它的方式是在C# 我应该在哪里放置在类型之间转换的功能?,c#,.net,oop,c#-4.0,C#,.net,Oop,C# 4.0,我在一个应用程序中有两个实例,需要实现将对象从一种类型转换为另一种类型的功能。一个从域对象转到另一个域对象,另一个从域对象转到XmlDocument 我最初设置它的方式是在DomainObject1和DomainObject2中分别包含ToXml()和ToMyOtherDO() ToXml中的功能实际上并不特定于DomainObject1的实现,可能存在于任何地方ToMyOtherDO()的功能非常特定于它所处的类型。两者都执行类型转换,但差异很大 我的问题是,我是否将此功能放在了正确的位置?这
DomainObject1
和DomainObject2
中分别包含ToXml()
和ToMyOtherDO()
ToXml
中的功能实际上并不特定于DomainObject1
的实现,可能存在于任何地方ToMyOtherDO()
的功能非常特定于它所处的类型。两者都执行类型转换,但差异很大
我的问题是,我是否将此功能放在了正确的位置?这个功能放在助手类中会更好吗?或者其他地方-可能会覆盖显式强制转换操作符?我通常喜欢将这种功能放入 编辑:解释
我通常更喜欢将这种功能放在扩展方法中,因为我不认为需要“转换”的类真的需要知道如何进行转换。这提供了一些解耦。您可以轻松地更改XML的格式,而无需更改要转换为XML的对象(当要转换的对象位于单独的程序集中时尤其有用)。
您最终会遇到这样一种情况:您希望将域对象转换为它实际上不需要知道的内容。例如,可能需要将域对象转换为
JObject
。如果使用扩展方法在单独的程序集中处理转换,则包含域对象的程序集不需要对库的引用。
扩展方法非常好,尤其是在处理实体框架时。实体类的代码是自动生成的,因此不能只向类中添加
ToXML()
或ToJObject()
。
这些只是我的首选项,我并不总是使用扩展方法来处理此类功能。它只是你的武器库中另一个很好的工具,用来解决这类问题。我将它作为扩展方法放在一个静态类中。通过这种方式,您可以像调用实例方法一样调用它,但它不会使域对象的代码变得混乱。如果函数不是特定于对象的,那么
ToXml()
函数应该放在helper类中
我建议将ToMyOtherDO()实现为类的扩展方法,因为它是特定于类的
public void ToMyOtherDo(this MyClass object1)
{
//Do stuff to object1
}
然后,您将能够调用
myobject.ToMyOtherDo()
(将myobject视为MyClass对象)如果ToXml
不是类型特定的,我将按照blachniet和其他人的建议执行,并将其放在扩展方法中
如果
ToMyOtherDO
只使用公共成员,那么扩展方法就是一个很好的地方。但是,如果ToMyOtherDO
需要private成员,那么它必须是它所转换的类型。我认为ToXml()
和ToMyOtherDO()
没有任何错误,并将以相同的方式执行。此方法的返回类型为void。无法获取转换的对象。这可能会返回DomainObject2
这只是一个示例,Sio可以根据自己的喜好调整函数。您能解释一下为什么您更喜欢将其放在扩展方法中,而不是直接放在DO中吗?有什么好处?包含EM的类是特定于此DO的,还是也可以包含其他类的任意EMs?我真的很想听听你的意见。