2010-08-02 62 views
0

我有2个班。一个是linq-to-sql类,另一个是可序列化的数据转储类。两个类似的类,应该做什么工作?

例子:

类TableNotes 标识 用户ID NoteText ...功能

[Serializable接口] 类NoteDump NoteText ...功能


他们俩会共享一组通用功能。我决定最好不要复制此功能,因此仅将它添加到TableNotes中。我将仅使用NoteDump对象来转储数据。

问题是,我想隐藏一个NoteDump到TableNotes。哪个类应该处理转换,为什么?例如,TableNotes可以使用NoteDump或NoteDump可以返回TableNotes类型的新对象..或者我可以使用转换运算符。

回答

1

真的,选择是你的。我个人会在课程内部使用“FromXXXX”约定。在这种情况下,这将是对TableNotes的方法:

static TableNotes FromNoteDump(NoteDump noteDump) 
{ 
    // conversion 
} 

如果你需要他们来回转换(或你认为有可能是未来类具有相似结构),考虑从基类继承或接口。

+0

关于使用构造来代替呢? – 2010-08-02 18:30:58

+0

您可以使用构造函数轻松完成此操作,但我个人不使用该格式。我觉得一个构造函数重载会比使用单独的方法更紧密地耦合类。实际上它并没有,但它让我觉得转换的意图通过使用更加冗长的方式表达得更加一致。 – drharris 2010-08-02 18:33:13

0

第三班的工作如何隐藏其他班级呢?

  • 您可以让第三个类完成这些类之间的所有转换。
  • 如果您只在所有其他代码中使用第三个类,那么通过将所需的任何接口从较低的两个类构建到第三个类中,您将有效地抽象出该类有多个版本的事实剩下的代码。
1

LINQ在各种类上实现了AsQueryableAsEnumerable

你可以实现你的TableNotesAsNoteDump() ...

NoteDump noteDump = new TableNotes().AsNoteDump(); 
+0

感谢您的这个想法。 – 2010-08-03 20:21:11

相关问题