我知道API /庫我將要描述的是非常簡單,它其實並不重要,我做什麼來得到它的工作,但我希望能最終設計多更復雜的系統,並希望得到一些有關如何設計簡單而有效的API的良好實踐。
信息
我再處理項目在Android中,我做了前一段時間,使一些代碼的可重用性(使用新的「API」的設計不斷嘗試練習)。
這個相當簡單的應用程序的一部分在屏幕上圍繞着文本進行混排,並且由於基於這個具有自己的混洗效果的「庫」有三種不同的程序,所以我選擇將公共代碼拉出到實際庫中並解耦從系統的其餘部分實施洗牌。我改變了一些東西,使這項工作:處理該洗牌放在一個班,每個應用程序提供充滿運行特定應用程序所需的值的配置對象的代碼。在當前設計下,配置對象提供了所需的洗牌實現的類。然後,庫在稍後需要時創建該類的實例。我喜歡這個,因爲它允許我的庫控制對象的所有內容,並將實例暴露給外部代碼,但是它也阻止了我使用構造函數參數(洗牌速度,方向等)來定製實現。 (一種解決方法是通過在某種的實現可以拉它時,由庫創建它從數據數組,但我討厭那些需要你在參數傳遞某種陰天和硬而─庫入住在編譯時配置垃圾一樣「的速度:90; HERP:DERP」。)
我的問題
這將是最好打發類與配置,使圖書館能夠控制它的整個生命週期,或這是不切實際的,我應該只是做一個該死的實例,並在通過考試。另外,如果傳遞一個類是不切實際的,當傳遞一個班一個好主意? (除之類的東西在某種地圖的某種插件系統中的類下注冊類實例的查找後)
我開始覺得,在Android的東西生命週期有嚴格的限制我實現「正常」的設計能力。而且我認爲,提供一個配置對象,最終獲取到庫值/類型使用(該配置是基於接口的)手動依賴注入(http://en.wikipedia.org/wiki/Dependency_injection#Manually_injected_dependency)。這也讓我可以隨時更改配置以獲得有趣的用戶端配置選項。 –