2012-02-01 60 views
3

我剛剛交付了一個API,似乎是我已經習慣的一步,因爲所有東西似乎都是用接口實現的,而且我正在努力讓自己的頭部他們。使用接口不掌握API

public partial class Form1 : Form, IFoo 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Guid jobID = AddBarToFoo(fooID, barPath); 
    } 

    public Guid IFoo.AddBarToFoo(string fooID, string barPath) 
    { 
     throw new NotImplementedException(); 
    } 

所以這是一個基本的結構。 Visual Studio已經完整地實現了接口,我可以調用AddBarToFoo方法。大。

但現在呢?很明顯,這個方法是一個需要一些代碼的空白,但是代碼是什麼?我應該刷新對象的API以使用該方法實例化嗎?或者我完全走錯了路?

+0

它應該返回一個'Guid',它不是'void'。基本上,'API''知道'這個接口,並且可以調用實現它的類型的方法 - 它應該在規範中說明你希望如何生成該Guid。 – 2012-02-01 13:56:45

+0

代碼可以是任何你想要的,這取決於你的產品規格。 – JConstantine 2012-02-01 13:57:03

回答

4

這是接口的東西。他們只定義某人會怎樣稱呼他們。他們絕對說沒有什麼關於該方法應該做什麼,或者應該怎麼做。這取決於實現界面來決定的人員。

VS「執行」該方法,通過添加單行throw new NotImplementedException();這實際上只是爲了滿足編譯器。

這裏有兩個可能的(人爲的)實現完全不同的東西。都實現IFoo

public class DbFoo:IFoo { 
    public Guid IFoo.AddBarToFoo(string fooID, string barPath) { 
     // this might add a Foo to the database and return its Guid 
    } 
} 

public class ListBasedFoo:IFoo { 
    public ListBasedFoo() { MyList = new List<Foo>(); } 

    public List<Foo> MyList { get; private set; } 

    public Guid IFoo.AddBarToFoo(string fooID, string barPath) { 
     // this could add a Foo to MyList, and return some Guid to reference it 
    } 
} 

編輯...你會看到接口在地方的抽象行爲是重要的用了很多,但實現可能會有所不同。例如,一個持久對象的接口。在開發過程中,您可能想要使用一個模擬器,將項目放入內存列表中。稍後,您可能會使用通過ADO .NET或實體框架或LINQ to SQL直接訪問數據庫的界面。也許在應用程序生命週期的另一個時刻,新的實現將被刪除,而不是使用WCF Web服務。

我上面的例子中的點是調用代碼不會中斷。 接口得到滿足 - 只有行爲已被更改。

+0

謝謝。這一點(和其他評論)明確表示,我對接口的理解並不完全錯誤,只是我已經爲大多數代碼庫提供了文檔,但只有一部分是實際的API。除了代碼本身自動生成的文檔外(這是這家公司的標準),所以我不得不將它分開。感謝您幫助我與接口,但!非常感激。 – 2012-02-01 14:44:59

1

Interface是你打算簽約的合同,你在執行的那一刻吧。所以你應該在這個方法中做什麼,這取決於你要用這個接口做什麼。

public class MyFooImplementation:IFoo { 
    public Guid IFoo.AddBarToFoo(string fooID, string barPath) { 
     // do somethign and return GUID 
    } 
} 

Visual Studio你好心產生與所需簽名的方法,但是把裏面,自然,NotImplementedException(),因爲你neeed仍然實現它。如果你忘了,解僱或者其他任何東西,但是不要在裏面寫任何東西,那麼在使用這個方法的時候,你的類的使用者會得到這個異常。

絕對正確的行爲。