Исходя из фона C++ Мне нужно освоить сложность Java мира и его фреймворков. Глядя на весенний каркас для DI, я считаю, что мне сложно сделать так, чтобы каждая функция setter , которая будет предметом публичной публикации DI. Разве это требование не нарушает принцип скрытия информации ?Не скрывает ли информация о разрыве инъекции Spring?
Конечно, я хочу, чтобы весна могла установить некоторые частные части моих классов , но я, конечно, НЕ хочу, чтобы каждый класс клиента мог делать то же самое.
Что мне здесь не хватает?
Этот ответ подразумевает, что «кодирование для интерфейсов» означает, что каждый класс должен реализовывать отдельный интерфейс. Это не то, что означает принцип, описанный в книге GoF. В действительности это применимо только к случаям, когда вам нужно или уже есть два отдельных типа объектов: один для абстракции (интерфейс) и другой для одной реализации этой абстракции. –
Я думаю, что вы, скорее всего, обнаружите, что классы, которые нужно вводить друг в друга в общем приложении Spring, являются ** услугами ** классами, такими как 'Dao' и т. Д. Я обнаружил, что большое количество из них может предположительно имеют альтернативные реализации –
Да, когда у вас есть несколько реализаций, применяется принцип «код для интерфейса, а не реализация». Но говорить такие вещи, как «если вы кодируете интерфейсы ...» без четкого контекста, вводит в заблуждение и легко может быть неправильно интерпретировано менее опытными разработчиками.Чрезмерное использование отдельных интерфейсов вызывает большой вред, ИМО. –