c# - 我应该在哪里放置功能以在类型之间进行转换?

标签 c# .net oop c#-4.0

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

我最初设置它的方式是在 DomainObject1DomainObject2 中包含一个 ToXml()ToMyOtherDO() 分别。

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

我的问题是,我是否将此功能放在了正确的位置?这个功能放在辅助类中会更好吗?或者其他地方 - 也许覆盖显式转换运算符?

最佳答案

我通常喜欢把这种功能放在extension methods中。 .

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

你最终会遇到这样一种情况,你想将你的领域对象转换成它并不真正需要知道的东西。例如,也许您想将域对象转换为 Json.NET JObject。包含域对象的程序集不需要引用 Json.NET如果您使用扩展方法在单独的程序集中处理转换,则为库。

扩展方法非常棒,尤其是在处理 Entity Framework 时。实体类的代码是自动生成的,因此您不能只向类添加 ToXML()ToJObject()

这些只是我的偏好,我并不总是使用扩展方法来处理这种功能。它只是您的武器库中用于解决此类问题的另一个很棒的工具。

关于c# - 我应该在哪里放置功能以在类型之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9603306/

相关文章:

java - 改变继承的super方法

javascript - Facebook 点赞/分享当前 URL

c# - 使用 BinaryReader 逐行读取

c++ - 使用 C++ OOB 的贪吃蛇游戏

c# - 检测 DEBUG、RELEASE 和我自己的模式 C#

c# - 用于程序集签名的 signtool 和 sn 或 al 之间的区别

java - 为什么我们需要 setter/getter ?

c# - 如何在 F# 中定义 T[] 的类型扩展?

c# - 使一种类型适应另一种类型的最佳 OO 实践?

javascript - 从 JsonResult 返回字符串数组并在 JavaScript 中使用它