2012-07-15 73 views
0

當你看到這個接口時,你會把它分成2個接口和2個具體類嗎? 或者你會創建1個接口和1個類。你會爲2個類實現一個類或2個接口的接口嗎

試想這對我來說似乎是一個開銷創建另一個接口和類只是2點的方法,但也...

另外其他的想法如何應對這種情況?

public interface IUnitDataProvider 
{ 
     // Testplan methods 
     IEnumerable<Unit> GetTestplanRootUnits(int templateId, int testplanId);   

     // Template methods 
     IEnumerable<Unit> GetTemplateRootUnits(int templateId); 
     void AddUnit(Unit unit); 
     void DeleteUnit(int unitId); 
     bool UnitExists(string unitName, int templateId); 

     // Mutual methods 
     IEnumerable<Unit> GetChildrenUnits(int templateId, int parentId); 
} 
+0

將另一個接口視爲開銷是新東西 – zerkms 2012-07-15 09:45:23

+1

您應該創建與應用程序設計所需的接口數量 - 儘可能簡單。 – zerkms 2012-07-15 09:46:12

+2

您是否聽說過[Interface Interregation Principle](http://en.wikipedia.org/wiki/Interface_segregation_principle)? – Oded 2012-07-15 09:50:20

回答

1

你應該提出一個問題「爲什麼我們需要將接口分成2個獨立的類和2個具體的類」。但是,如果它讓你瞭解業務邏輯,那麼你可以做到這一點。

從軟件度量的角度來看,您擁有的凝聚力越強,您獲得的設計就越強。有許多論文證明了這個假設。你可以參考一下這個鏈接Introduce contents of cohesion metric

就你而言,我認爲你應該把它分成兩個接口來處理模板測試和測試計劃。

+0

@你會在哪裏放置相互的GetChildrenUnits方法?在每個界面中執行代碼2次? NO ... – Pascal 2012-07-15 12:59:48

0

您應該爲每個您必須面對的問題創建一個界面,併爲您針對此類問題創建的每個解決方案創建一個類。我將實現IUnitDataProvider的類作爲facade,內部使用更多的接口和類來解決問題。但是對於外觀來說,你的界面看起來是正確的我看到的唯一問題是,如果TestPlan(和GetTestplanRootUnits)重返您的測試用例,我不認爲在「域」界面中這樣做是個好主意。只要你需要的東西實際存在並且在問題領域本身有意義,忘記了你需要它進行測試之後,將測試用例需要的東西放在問題域的接口或類中就可以了。如果您在問題域中找不到它,並且找不到包含測試內容的名稱,那麼您應該可以考慮在哪個問題域中存在該內容,並創建其他類接口&你正在解決的問題。

+0

立面將幾種方法的複雜性/細節組合成一種方法。這種模式與我的問題有什麼關係? – Pascal 2012-07-15 15:37:04

+0

從我能收集到的信息來看,我認爲你的問題太大了,不能由一個班級完全解決。你似乎有一種單位的CRUD,它支持某種樹。我認爲對於一個班級來說這太過分了。 – user1494736 2012-07-15 15:40:42

+0

對你也是同樣的問題:你將把GetChildrenUnits方法放在哪裏?在每個界面中執行代碼2次? NO ... – Pascal 2012-07-15 15:48:21

相關問題