几年以来,常识似乎要求对接口进行编程而不是针对实现进行编程.对于高级代码,这似乎是合乎逻辑的,例如,如果我的应用程序中有一个复杂的求解器,那么最好有这样的东西:
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
那么,在决定是否应该将某些东西放在界面后面以及什么时候不应该放在界面后面时,哪些元素很重要?
最佳答案 移动到接口的原因是它使事情更简单或减少耦合. (这就是接口的用途).
离开界面的原因是它会使事情变得更复杂或杀死性能(但可以肯定的是配置文件).我认为你的IComplexNumber类实际上使得类层次更复杂,除非你引入了MockComplexNumber,但是我怀疑这样的类会有用……而且它可能会让事情变得更慢,但我会测量它.
但是,不要认为你需要以一种方式做所有事情,或者你的决定是固定不变的.使用界面进行转换非常容易.