Принцип инверсии зависимости и "строка"
Я знаю, что вы не можете создать программу, которая на 100% соответствует принципу инверсии зависимости. Все мы нарушаем это путем создания строк в наших программах, не задумываясь об этом. Поскольку String является классом, а не типом данных, мы всегда становимся зависимыми от конкретного класса.
Мне было интересно, есть ли какие-либо решения для этого (чисто теоретически). Поскольку String в значительной степени является черным ящиком с очень небольшим количеством "утечек" и имеет сложный фоновый алгоритм, я не ожидаю реальной реализации курса:)
1 ответ
Цель этого принципа - не создавать экземпляры внутри класса и не использовать ключевое слово "new". Поэтому создание экземпляров объектов (или строк) не нарушает принцип.
Принцип также не в том, чтобы всегда создавать абстракцию более высокого уровня (например, интерфейс или базовый класс), чтобы внедрить ее и способствовать более слабой связи. Если абстракция уже является разумной, нет причин пытаться ее улучшить. Какую выгоду вы бы получили, поменяв реализацию строки?
Я на самом деле разместил этот вопрос несколько лет назад (полуактуально): IOC / DI: Регистрация конкретного типа - это запах кода?
Так в чем же принцип? Речь идет о написании компонентов, которые в высокой степени ориентированы на их собственные обязанности, и внедрении компонентов, которые в высокой степени ориентированы на их собственные обязанности. Эти компоненты обычно являются службами при использовании структуры внедрения зависимостей и конструктора, но также могут быть типами данных при выполнении других типов внедрения (например, внедрение метода).
Обратите внимание, что не требуется, чтобы эти сервисы или типы данных были интерфейсами или базовыми классами - они могут быть абсолютно конкретными типами, не нарушая принцип.
Инверсия зависимости заключается не в создании объекта, а в зависимости от модуля высокого / низкого уровня и того, кто определяет домен (объект и интерфейс).
Вы говорите о внедрении зависимости, являющейся частью принципа инверсии контроля.