自從幾年以來,常識似乎決定了針對接口而不是針對實現進行編程更好。對於高級代碼,這確實是合乎邏輯的,例如,如果我有我的應用程序複雜的解算器,它似乎最好能有這樣的事情:模塊化:是否使用接口?
ISolver *solver = solverFactory.getSolver();
solver->solve(inputdata);
不是
Solver solver;
solver.solve(inputdata);
在第一個代碼,也更容易嘲笑求解,從而,進行單元測試。
但我的問題是:在哪個級別使用接口不再有意義。例如。如果我有新建一個ComplexNumber類(或String類,或者別的什麼)在我的應用程序,然後寫這樣的:
IComplexNumber *complexNumber = complexNumberFactory.create(1,2); // 1+2i
似乎更復雜(特別是關於性能)比寫作:
ComplexNumber complexNumber(1,2); // 1+2i
所以,哪些元素在決定是否應將某些內容放在界面後面以及何時不應將其放在界面之後非常重要?
原因1:編寫可測試的代碼,你應該能夠使用mockobject創建單元測試,模擬對象只是實現了你的實際模塊的一些接口。 原因2:你應該能夠讓你的代碼儘可能抽象。有時候,除了功能之外,對於這個類什麼都不瞭解,可以說你有一個客戶端,你不知道客戶端是一個網絡/ TCP客戶端,還是一個http進程客戶端,它通過管道或其他你剛纔知道的其他東西進行交互主要界面,連接方式,斷開連接,sendData ... – AlexTheo 2012-02-01 13:36:24
它不依賴於語言,只要看看戰略,訪客模式爲例。 – AlexTheo 2012-02-01 13:39:18
@Alex你仍然可以從抽象類創建模擬對象,不必是一個接口 – Mark 2012-12-13 11:35:04