我試圖構建一個框架,允許人們通過實現一個接口來擴展我們的核心功能。下面是這個界面的一個簡單例子。方法參數與參數對象
public interface MyInterface
{
IData GetData(string p1, char p2, double p3);
}
最近,我們已經決定修改這個接口(我知道我不應該打破相關的代碼,但事實是我們沒有任何第三方實現這個接口還,所以我們還有機會對於「重複」來正確實現這個接口)。
我們需要在此界面添加2個參數才能使我們的軟件正常工作。有兩種方法,我們正在考慮的只是將它們添加到簽名是這樣的:
public interface MyInterface
{
IData GetData(string p1, char p2, double p3, bool p4, DateTime p5);
}
,或者通過創建參數對象這樣
public class MyParameters
{
public bool p4 { get; set; }
public DateTime p5 { get; set; }
}
並將它們添加到像這樣的方法結束:
public interface MyInterface
{
IData GetData(string p1, char p2, double p3, MyParameters p4);
}
我正在尋找某種指導,以哪種方式進行「最正確」的方式。我可以看到兩種類型的優點和缺點,但我不希望我的偏見導致我走錯了路。
我的一些主要問題是:軟件的
- 可擴展性 - 我希望用戶能夠通過實現界面
- 可維護性做的事情我還沒有考慮過的 - 在理想情況下,我想從來沒有觸摸到了負責調用getData()再次
- 清潔API代碼 - 我不想我到達使溶液第三方開發者畏縮
我甚至不知道要問什麼問題在線獲取有關此問題的指導。我有一種感覺,答案是「它取決於」(關於p1-p5與GetData()函數的目的是如何相關的),但是有人能指出我應該請求幫助我評估的問題列表一種解決方案是否比另一種更好?
對於參數類型有一個接口是一個好主意,但考慮到接口不能被版本化,如果API會傳播,那麼沒有人可以在不破壞存在的情況下向參數類型添加加號功能(比如再添加一個參數)碼。 –