Внедрение зависимости или оператор разрешения области?

Не нашел похожего вопроса, поэтому извиняюсь, если он уже есть.

В моей системе я хочу, чтобы несколько библиотек функций облегчали ряд задач во всей системе. Это может быть проверка электронной почты. Нет смысла каждый раз писать полное регулярное выражение, если это может сделать функция, поэтому мне нужно только что-то изменить и исправить ошибки в одном месте.

Скажем, я пишу класс Files_Tools.

Я могу заставить его работать как путем внедрения экземпляра этого класса в объекты, которым нужны функции из этого класса. Но я также могу написать класс Files_Tools со статическими функциями и обращаться к ним с помощью оператора разрешения области видимости. Но, как я понял, одна из главных вещей в DI (внедрение зависимостей) заключается в том, чтобы избежать такого «глобального использования». Итак, моя логика подсказывает мне использовать подход DI. Тем не менее, мне все еще кажется неправильным, что я делаю это таким образом.

Итак, мой вопрос: что считается наиболее правильным способом создания набора инструментов для системы? Прежде всего, сделать это как класс, а не просто функции? И тогда, если это действительно класс, стоит ли мне стремиться к SRO или DI?

Я понимаю, что, вероятно, нет окончательного ответа на этот вопрос, но я хочу знать, полностью ли я сбился с пути или иду туда, куда поступили бы и многие другие кодеры.

Заранее спасибо :)


person Jens    schedule 19.05.2012    source источник


Ответы (1)


DI упрощает модульное тестирование ваших классов и методов без зависимости от внедренного класса... вы можете имитировать внедренный объект и манипулировать его результатами в соответствии с вашими тестами. Разрешение области действия оставляет вас с этой зависимостью, поэтому тесты не полностью изолированы.

Многие из моих более ранних проектов используют статические классы для такой функциональности, и попытка написать модульные тесты для них через 6 лет стала настоящей рутиной, потому что я не использовал DI.

person Mark Baker    schedule 19.05.2012