2011-05-03 38 views
0

我一直在努力解決設計問題。我有一個對象Foo與一個對象數組Bar。有一系列與Foo完全耦合的計算方法,並且依賴於Bar數組的完整知識。所以我應該:兩個共享對另一個對象的依賴關係的對象的正確設計是什麼?

  • 做一個Calculator類並傳入Bar對象的數組。這對我來說似乎很糟糕,因爲我無法將Calculator作爲獨立單元進行測試,因爲Foo和Calculator都依賴於相同的Bar數組。

  • 做一個計算器模塊,並以某種方式擴展Foo,使其包括計算器?我還沒有找到一個好的方法來做到這一點,計算器自動擁有它所需的所有Foo知識。這可能嗎?

  • 只是保持計算器在美孚,因爲它是如此耦合到它。

回答

2

您的架構不應該依賴於對象類,而應該依賴於接口。

Foo的實例應該在構造函數中需要一個實現接口iCalculator的參數。你的方法addBar應該只要求你傳入一些實現接口的東西。而計算器對象(它傳遞給Foo)應該能夠在iBar對象的任何實例上執行calculate方法。

現在,您可以單獨測試所有三個對象,如果您提供具有相同接口的Mocks。

的「解決方案」實際上是Dependency inversion principle只是應用程序,是的是的SOLID原則一一/

+0

這裏是一個視頻,解釋這個原理:http://www.youtube.com/watch ?v = tvFK_BXv3P4 – 2011-05-03 21:18:50

+0

「Foo'的實例應該在構造函數中需要一個實現接口'iCalculator'的參數」 - 在Ruby中,'iCalculator'是類還是模塊? – 2011-05-03 23:03:32

+0

@ Andrew-Grimm afaik,ruby並沒有真正的接口,但最接近的是模塊。但我想,你**可以**使用特定的類,只是它會更努力。 – 2011-05-03 23:11:14

相關問題