2008-11-17 77 views
1

我有一个域对象的集合,我需要将它转换为.NET框架使用的另一种类型。做这种转变的最佳做法是什么?最佳的OO练习适应一种类型到另一种?

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

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

编辑注:我想指出,我不控制SyndicationItem。它构建在.NET Framework中。另外,我真的很想同时将几个ContentEntry对象转换为SyndicationItems。

回答

3

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

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

+0

在我这里的情况,我发现这是最好的方法。铸造似乎并不合适,并且由于不需要维护状态,创建一个新的转换器类,每次需要进行转换时都会实例化,看起来过于夸张。我的工厂目前只有静态成员。 – 2008-11-18 02:29:04

1

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

4

我建议寻找Adapter Pattern

在计算机编程,适配器 设计图案(通常被称为 包装图案或简称为 包装器)转换为 一类一个接口成兼容的界面。

0

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

SyndicationItem item = (SyndicationItem)entry

0

如果能够通过这两种类型的公共合同做转换,我强烈推荐的扩展方法。

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

推理:

  • 你不想任一对象有与其他物体联结。
  • 转换过程本身没有状态管理,一旦它已经完成(适用于静态方法)
相关问题