Я считаю, что использование директив препроцессора, таких как #if UsingNetwork
, является плохой практикой OO - других сотрудников нет.
Я думаю, при использовании контейнера IoC (например, Spring) компоненты могут быть легко сконфигурированы, если они запрограммированы соответствующим образом. В этом контексте либо свойство IsUsingNetwork
может быть установлено контейнером IoC, либо, если реализация "using network" ведет себя по-другому, следует реализовать и внедрить другую реализацию этого интерфейса (например: IService
, ServiceImplementation
, NetworkingServiceImplementation
).
Может кто-нибудь, пожалуйста, укажите цитаты из OO-гуру или ссылок в книгах, которые в основном читают "Использование препроцессора - это плохая практика OO, если вы пытаетесь настроить поведение, которое должно быть настроено через контейнер IoC"?
Мне нужны эти цитаты, чтобы убедить коллег в рефакторе...
Изменить: я знаю и согласен с тем, что использование директив препроцессора для изменения специфического кода целевой платформы во время компиляции является прекрасным, и для этого предназначены директивы препроцессора. Тем не менее, я думаю, что для создания хорошо разработанных и тестируемых классов и компонентов следует использовать конфигурацию времени выполнения, а не конфигурацию compiletime. Другими словами: использование #defines и #if сверх того, что они предназначены, приведет к сложному тестированию кода и плохо спроектированных классов.
Кто-нибудь читал что-то в этом направлении и может дать мне, чтобы я мог ссылаться?