2013-01-25 34 views
1

當我有多層類和接口時,我對使用接口提取的最佳方法有點困惑。假設我有以下層次結構:提取具有複雜類結構的接口

Foo : WidgetBase, IWidget 
WidgetBase: BusinessObject, IThingy 
IThingy : IGenericObject 

現在我知道我必須將IFoo接口提取到單獨的項目中;但是接口結構是否必須複製真實的結構 - 這意味着我必須爲BusinessObject和WidgetBase提取接口?還是這意味着我應該在創建提取的接口時將結構扁平化,創建1個接口IFoo,包含與Foo屬性及其所有父類和接口相對應的屬性,一直到層次結構?

在我的界面中還有一些枚舉類型屬性 - 我該如何最好地解決這些問題?

public interface IWidget 
{ 
    public WidgetType Type { get; set; } 
} 

public enum WidgetType 
{ 
    Big, Small 
} 

請說明一下。

+1

也許查看此MSDN站點顯式接口實現可能有助於說明http://msdn.microsoft.com/en-us/library/vstudio/ms173157.aspx – MethodMan

回答

1

IFoo

IFoo最低要求應該繼承IWidgetIThingy。 它還需要包括FooWidgetBase的所有公共成員。

public interface IFoo : IWidget, IThingy 
{ 
    // public member of Foo and WidgetBase... 
} 

潛在重構1:

它可能會更好地定義一個接口WidgetBase這樣的:

public interface IWidgetBase : IThingy 
{ 
    // public members of WidgetBase... 
} 

然後IFoo可能只是繼承:

public interface IFoo : IWidget, IWidgetBase 
{ 
    // public member of Foo. 
} 

潛在重構2:

同樣可以適用於BusonessObject:定義一個接口爲它,並有IWidgetBase繼承這一點。

一般主體:

你的接口應指定對象的行爲,應該使用繼承,其中行爲自然就延長了。

0

我會建議您根據您的新界面的目的。你想要IFoo有什麼行爲?換句話說,它在新項目中的用途是什麼。爲新項目提取足夠的數據。不要把你的IFoo與其他接口的繼承或Foo類的當前狀態混淆。