我有一组域对象,我需要转换为另一种类型供.NET框架使用。进行这种转变的最佳做法是什么?
具体来说,我有一个名为ContentEntry的类型,我需要将其转换为SyndicationItem以用于放入SyndicationFeed。转换本身是直截了当的,但我正在寻找一个好的模式。我是否在ContentEntry上创建了一个名为CreateSyndicationItem()的方法,或者可能是一个单独的转换器对象?也许是一种扩展方法?
这有些主观,但我很欣赏一些想法。
编辑注意:我想注意我不控制SyndicationItem。它内置于.NET Framework中。另外,我真的想一次将几个ContentEntry对象转换为SyndicationItems。
答案 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()
推理: