c# – 需要报价:预处理器的使用是糟糕的OO练习

我相信,像#if UsingNetwork这样的预处理器指令的使用是糟糕的OO实践 – 其他同事没有。
我认为,当使用IoC容器(例如Spring)时,如果相应地编程,组件可以很容易的配置。在这种情况下,IoC容器可以设置适当的IsUsingNetwork,或者如果“使用网络”实现的行为不同,那么该接口的另一个实现应该被实现和注入(例如:IService,ServiceImplementation,NetworkingServiceImplementation)。

有人可以提供OO-Gurus的引用或书籍中的引用,基本上读为“如果您尝试配置应通过IoC容器进行配置的行为,则预处理程序的使用情况不太好OO练习”?

我需要这个引文来说服同事重构…

编辑:我知道并同意,在编译期间使用预处理器指令来更改特定于目标平台的代码是正确的,这就是预处理指令。但是,我认为应该使用运行时配置而不是compiletime配置来获得良好的设计和可测试的类和组件。换句话说:使用#define和#if超出了它们的意图将导致难以测试代码和严重设计的类。

有没有人读这些东西,可以给我,所以我可以参考?

亨利·斯潘塞写了一篇名为#ifdef Considered Harmful的论文。

此外,Bjarne Stroustrup自己在他的书The Design and Evolution of C++第18章中皱眉着使用预处理器,并希望完全消除它。然而,Stroustrup也认识到#ifdef指令和条件编译的必要性,并继续说明C中没有很好的选择。

最后,Pete Goodliffe在他的书Code Craft: The Practice of Writing Excellent Code的第13章中给出了一个例子,即使是用于其原始目的,#ifdef可以让你的代码变得混乱。

希望这可以帮助。但是,如果你的同事首先听不懂合理的论据,我怀疑书的引号有助于说服他们;)

翻译自:https://stackoverflow.com/questions/473354/quote-needed-preprocessor-usage-is-bad-oo-practice

转载注明原文:c# – 需要报价:预处理器的使用是糟糕的OO练习