【发布时间】:2011-04-17 16:48:22
【问题描述】:
几年以来,常识似乎表明最好针对接口进行编程而不是针对实现进行编程。对于高级代码,这确实看起来合乎逻辑,例如如果我的应用程序中有一个复杂的求解器,最好有这样的东西:
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
那么,哪些元素在决定是否应将某物放在界面后面以及何时不应将其放在界面后面时很重要?
【问题讨论】:
标签: c++ interface dependency-injection modularity