C# 使一种类型适应另一种类型的最佳OO实践?
我有一个域对象的集合,需要将其转换为另一种类型以供.NET framework使用。进行这种转变的最佳实践是什么 具体地说,我有一个名为ContentEntry的类型,我需要将其转换为SyndicationItem,以便在放入SyndicationFeed时使用。转换本身是直截了当的,但我正在寻找一个好的模式。我是在ContentEntry上创建一个名为CreateSyndicationItem()的方法还是一个单独的转换器对象?也许是一种扩展方法 这将有点主观,但我希望有一些想法 编辑注释:我想指出,我不控制SyndicationItem。它内置于.NET框架中。另外,我真的很想一次将几个ContentEntry对象转换为SyndicationItemsC# 使一种类型适应另一种类型的最佳OO实践?,c#,.net,oop,C#,.net,Oop,我有一个域对象的集合,需要将其转换为另一种类型以供.NET framework使用。进行这种转变的最佳实践是什么 具体地说,我有一个名为ContentEntry的类型,我需要将其转换为SyndicationItem,以便在放入SyndicationFeed时使用。转换本身是直截了当的,但我正在寻找一个好的模式。我是在ContentEntry上创建一个名为CreateSyndicationItem()的方法还是一个单独的转换器对象?也许是一种扩展方法 这将有点主观,但我希望有一些想法 编辑注释:我
IMHO是一个转换器类,它以一种方式进行转换,也可能以另一种方式进行转换。类应该有一个用途,例如表示ContentEntry。添加转换为它提供了第二个用途,因此打破了OO的“规则”。我建议查看 在计算机编程中,适配器 设计模式(通常称为 包装器模式或简单的 包装器)将一个接口转换为 将类转换为兼容接口
这取决于。。。您只是想要一种方便的方式来托管转换方法吗?如果控制一个或两个类,只需添加一个强制转换操作符重载,就可以将一个类强制转换为另一个类。如果你想让它变得明显,你可以做一个显式操作符
SyndicationItem=(SyndicationItem)条目
如果您可以通过这两种类型的公共合同进行转换,我强烈推荐一种扩展方法
另请参见System.Linq.Enumerable.ToList(),Enumerable.ToDictionary()
理由:
- 您不希望任何一个对象与另一个对象耦合
- 转换过程本身在完成后没有状态可管理(适用于静态方法)
当您说要同时创建多个ContentEntry对象时,我假设您有一个ContentEntry对象数组。另一个方法(比如CreateSyndicationItems())可能返回SyndicationItems数组,并将ContentEntry对象数组作为其参数。在我的情况下,我发现这是最好的方法。强制转换似乎不合适,而且因为不需要维护任何状态,所以创建一个新的转换器类,每当我需要进行转换时,它都会被实例化,这似乎有些过分。我的工厂目前只有静态成员。工厂模式的设计使工厂决定构建哪个实现,但只返回接口,因此调用类不关心创建了哪个实现。这并不是作者所问的严格的1对1映射。