Java dependency inversion Principe , как не нарушать и писать гибкий код
Как мы все знаем dependency inversion говорит о том , что модули верхнего уровня не должны зависеть от модулей нижнего уровня , и оба должны зависеть от абстракций , кто более подробно расскажет что это означает и как писать код который не нарушает dependency inversion и его можно масштабировать , допустим я хочу написать метод для валидации Email и как теперь его вызвать там где мне нужно ? Создавать экземпляр класса в котором этот метод ? Ну это вроде как нарушает dependency Inversion , с помощью интерфейсов и абстракций ? Тогда это сколько же интерфейсов будет или абстрактных классов , с помощью статиков (утилит) ну как бы тоже не самое хорошее решение , и вот как быть ??
Ответы (1 шт):
у вас есть какой-то класс, где вам надо сделать валидацию емейла.
вы создаете интерфейс IEmailValidation с методом validate() который на вход принимает String и возвращается boolean
и создаете класс EmailValidationImpl наследник от IEmailValidation
в вашем классе, где вы хотите использовать валидацию, вы создаете объект типа IEmailValidation, но сам объект будет EmailValidationImpl
именно таким образом и соблюдается это правило SOLID.
теперь вы можете создавать различные вариации реализации IEmailValidation. и при этом ваш класс, где вам надо будет валидировать емейл, никак не будет меняться. потому что он не зависит от модуля нижнего уровня. он зависит от абстракции.
Тогда это сколько же интерфейсов будет или абстрактных классов?
много. практически на каждый класс, который является архитектурным, а не незаменяемой утилитой.