Введена зависимость или оператор разрешения области?
Я не нашел подобного вопроса, поэтому прошу прощения, если он уже существует.
В моей системе я хочу, чтобы ряд библиотек функций облегчал выполнение ряда задач по всей системе. Это может быть проверка по электронной почте. Нет смысла каждый раз писать полное регулярное выражение, если я могу заставить функцию делать это, поэтому мне нужно только что-то изменить и исправить ошибки в одном месте.
Скажем, я пишу класс с именем Files_Tools.
Я могу заставить его работать как зависимостью, вставляя экземпляр этого класса в объекты, которым нужны функции из этого класса. Но я также могу написать класс Files_Tools со статическими функциями и обращаться к ним с помощью оператора разрешения области видимости. Но, как я уже понял, одна из главных вещей в DI (внедрение зависимостей) состоит в том, чтобы избежать такого рода "глобального использования". Так что моя логика подсказывает мне придерживаться подхода DI. Тем не менее, это все еще не чувствует себя "правильным", что я делаю это таким образом.
Поэтому мой вопрос: что считается наиболее правильным способом создания набора инструментов для системы? Прежде всего, это сделать его классом, а не просто функцией? И потом, если это действительно класс, это путь, я должен стремиться к SRO или DI?
Я понимаю, что, вероятно, нет однозначного ответа на этот вопрос, но я хочу знать, полностью ли я не в курсе или направляюсь туда, куда бы поступили многие другие программисты.
Заранее спасибо:)
1 ответ
DI облегчает юнит-тестирование ваших классов и методов без зависимости от внедренного класса... вы можете смоделировать внедренный объект и манипулировать его возвратами в соответствии с вашими тестами. Разрешение области действия оставляет вас с этой зависимостью, поэтому тесты не полностью изолированы.
Многие из моих более ранних проектов используют статические классы для такой функциональности, и попытка написать для них модульные тесты 6 лет - теперь настоящая рутина, потому что я не использовал DI.