2008-12-12 116 views
0

我有6个类,它们都是文档类型。所有文档类型都有相同的8个字段。有一个类只包含这8个字段。其余的课程有更多的领域。其中一些类具有相同的字段(8个字段旁边)。如何实现所有使用相同变量的类

实施例:

类文件:字段1〜8

类形式:字段1〜8和场9和10

类WorkInstruction:字段1〜8和场9和10

分类程序:字段1到10和字段11

希望这将清楚表明我的观点。

我的问题是,实现这个的最好方法是什么?我应该创建一个或多个接口,还是应该使用抽象类?

日Thnx

+0

您的描述中的“t/m”是什么意思? – 2008-12-12 09:44:29

+0

对不起,这是荷兰语,但我的意思是直到和 包括。我编辑了我的文本,thnx :) – Martijn 2008-12-12 09:56:03

回答

2

要么使文献基类型表等,或者使一个形式有额外的字段和一个单独的文档(即,使用的组合物的,而不是继承)的引用。在这种情况下,这听起来像继承很可能是最好的选择,但它实际上取决于你想用它做什么。你有代码可以处理任何文档,包括Form,WorkInstruction等?

编辑:例如,假设您有一个用户界面控件,它可以显示任何文档的公共部分 - 即常见的8个字段。这将需要一个Document实例。您可以可能希望能够直接向其传递Form或WorkInstruction - 在这种情况下,最好从Document派生。或者,在呈现Form或WorkInstruction时,可以分别创建在文档部件中传递的控件实例。也就是说,它的这之间的差异(在C#中 - 你没有指定你的语言兴趣):

class Form : Document { ... } 

// Later on 
Controls.Add(new DocumentDisplay(form)); 

这:

class Form 
{ 
    private Document Document { get; set; } 
    // Other stuff 
} 

// Later on 
Controls.Add (new DocumentDisplay(form.Document)); 

不知道你的设计的其余部分,它的很难推荐一个或另一个。我通常比继承更喜欢构图,但是这更像是一种自然的继承情况。

0

旧学校的答案是创建一个共享字段和继承类。

时髦的答案是创建一个拥有这些恶魔并且成为其成员的类。

如果您每次都会更改基础,那么继承会在类之间创建更多的依赖关系,这被认为是不好的做法。

在一个简单的情况下,它并没有真正的差异。但是如果你开始向这些领域添加行为,它可能会。

0

信息太少给出一个明确的答案

如果这些对象共享的仅仅是数据的属性......我会用这样的事情。

class Document 
{ 
    List<Field> m_Fields; 
    public void AddField(Field f) {... } 
    public void AddFields(Field[] f) {... } 
} 

class DocumentFactory() 
{ 
    public static Document GetDocument() 
    { 
    Document d = new Document(); 
    d.AddFields(GetDocumentFields());  // private helper .. returns fields 1-8 
    return d; 
    } 
    public static Document GetForm() 
    { 
    Document d = new Document(); 
    AddDocumentFields(d); 
    d.AddField(FIELD_9); 
    d.AddField(FIELD_10); 
    } 
    // and so on.. 
} 

的作品不管类型的文档的任何代码,进入文档类。
如果除此之外,您还有专门的/基于特定对象类型的行为,您需要生长一个继承类型层次结构(如Jon所说,它看起来像名称中的IS-A关系)。

相关问题