最适合一种类型的OO练习?

时间:2008-11-17 22:04:07

标签: c# .net oop

我有一组域对象,我需要转换为另一种类型供.NET框架使用。进行这种转变的最佳做法是什么?

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

这有些主观,但我很欣赏一些想法。

  

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

5 个答案:

答案 0 :(得分:4)

我建议查看Adapter Pattern

  

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

答案 1 :(得分:3)

由于无法修改SyndicationItem的构造函数,我建议您使用factory pattern。创建一个具有CreateSyndicationItem()方法的SyndicationItemFactory类。此方法返回SyndicationItem对象。在这种情况下,您只需要一个版本的方法,它将采用ContentEntry对象。

当你说你想一次创建多个ContentEntry对象时,我假设你已经说了一个ContentEntry对象数组。另一种方法(比如CreateSyndicationItems())可能会返回一个SyndicationItems数组,并将一个ContentEntry对象数组作为其参数。

答案 2 :(得分:1)

恕我直言,转换器类可以转换为一种方式,也可能是另一种转换方式。一个类应该有一个目的,例如表示ContentEntry。添加转换为第二个目的,因此打破了OO'规则'。

答案 3 :(得分:0)

这取决于......您是否只想要一种方便的方式来托管转换方法?如果你控制一个或两个类,你可以简单地添加一个转换操作符重载,这样你就可以将一个类转换为另一个类。如果您希望它显而易见,您可以创建一个显式运算符

SyndicationItem item = (SyndicationItem)entry

答案 4 :(得分:0)

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

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

推理:

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