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

C# 使一种类型适应另一种类型的最佳OO实践?,c#,.net,oop,C#,.net,Oop,我有一个域对象的集合,需要将其转换为另一种类型以供.NET framework使用。进行这种转变的最佳实践是什么 具体地说,我有一个名为ContentEntry的类型,我需要将其转换为SyndicationItem,以便在放入SyndicationFeed时使用。转换本身是直截了当的,但我正在寻找一个好的模式。我是在ContentEntry上创建一个名为CreateSyndicationItem()的方法还是一个单独的转换器对象?也许是一种扩展方法 这将有点主观,但我希望有一些想法 编辑注释:我

我有一个域对象的集合,需要将其转换为另一种类型以供.NET framework使用。进行这种转变的最佳实践是什么

具体地说,我有一个名为ContentEntry的类型,我需要将其转换为SyndicationItem,以便在放入SyndicationFeed时使用。转换本身是直截了当的,但我正在寻找一个好的模式。我是在ContentEntry上创建一个名为CreateSyndicationItem()的方法还是一个单独的转换器对象?也许是一种扩展方法

这将有点主观,但我希望有一些想法

编辑注释:我想指出,我不控制SyndicationItem。它内置于.NET框架中。另外,我真的很想一次将几个ContentEntry对象转换为SyndicationItems


IMHO是一个转换器类,它以一种方式进行转换,也可能以另一种方式进行转换。类应该有一个用途,例如表示ContentEntry。添加转换为它提供了第二个用途,因此打破了OO的“规则”。

我建议查看

在计算机编程中,适配器 设计模式(通常称为 包装器模式或简单的 包装器)将一个接口转换为 将类转换为兼容接口


这取决于。。。您只是想要一种方便的方式来托管转换方法吗?如果控制一个或两个类,只需添加一个强制转换操作符重载,就可以将一个类强制转换为另一个类。如果你想让它变得明显,你可以做一个显式操作符


SyndicationItem=(SyndicationItem)条目

如果您可以通过这两种类型的公共合同进行转换,我强烈推荐一种扩展方法

另请参见System.Linq.Enumerable.ToList(),Enumerable.ToDictionary()

理由:

  • 您不希望任何一个对象与另一个对象耦合
  • 转换过程本身在完成后没有状态可管理(适用于静态方法)

由于无法修改SyndicationItem的构造函数,我建议您使用。创建具有方法CreateSyndicationItem()的SyndicationItemFactory类。此方法返回SyndicationItem对象。在本例中,您只需要该方法的一个版本,它将接受ContentEntry对象


当您说要同时创建多个ContentEntry对象时,我假设您有一个ContentEntry对象数组。另一个方法(比如CreateSyndicationItems())可能返回SyndicationItems数组,并将ContentEntry对象数组作为其参数。

在我的情况下,我发现这是最好的方法。强制转换似乎不合适,而且因为不需要维护任何状态,所以创建一个新的转换器类,每当我需要进行转换时,它都会被实例化,这似乎有些过分。我的工厂目前只有静态成员。工厂模式的设计使工厂决定构建哪个实现,但只返回接口,因此调用类不关心创建了哪个实现。这并不是作者所问的严格的1对1映射。