Я пишу программное обеспечение уже много лет и всегда старался создать выразительный, четко читаемый, поддерживаемый, надежный код. Недавно я присоединился к команде, разрабатывающей веб-приложения с использованием Spring-управляемых объектов. Но мне очень неудобно с этой технологией. Для меня это похоже на то, что все принципы инкапсуляции и скрытия информации, достижения десятилетий разработки программного обеспечения были просто оставлены. Я ясно вижу плюсы использования контейнера Inversion of Control, для перемещения системных зависимостей из кода программы в файлы конфигурации. Но теперь я вижу, что Spring используется так, как я чувствую, просто добавляет ненужную сложность, не принося никакой пользы.Как вы справляетесь с дополнительной сложностью, добавленной весенними бобами?
Использование Spring для создания бэкэнсов, поддерживающих webapp, объекты уже не четко организованы в модулях и не имеют минимальной видимости. Вместо этого теперь существует одно глобальное пространство имен компонентов. Из-за этого объекты, как правило, получают ужасные имена, такие как «pendingOrderCustomerName», и, чтобы усугубить ситуацию, такие имена даже не четко идентифицируют четко определенный объект, потому что определения bean могут исходить из различных источников определения, собранных из явно определенных местоположений: Вместо того, чтобы просто определять класс в пакете, Spring beans собираются из xml-файлов, со свободными возможностями переопределения и слабо определенными отношениями.
Например, когда у меня есть тип «Учетная запись» в простой Java, в пакете «my.webstore», я обычно знаю о свойствах, отношениях и способностях этого типа в одном месте, «my/webstore/Account.java ". Экземпляры «Учетной записи» существуют как ссылки на объекты, работающие с учетными записями, состояние любого экземпляра точно определяется классом. С весенними бобами все усложняется: экземпляр «Учетная запись» теперь существует под глобальным именем в области управления, управляемой контейнером, с состоянием, собираемым из xml-файлов, найденным вдоль пути поиска файла на основе шаблонов именования ...
Прошли те дни, когда, чтобы понять, что делает объект и как он себя ведет, вам просто нужно было прочитать его источник программы. Сегодня вам нужен источник java объекта (который может быть достаточно сложным для понимания), плюс вы должны найти любые файлы конфигурации, которые могут изменить этот объект, что непросто, потому что вам нужно выяснить все способы, из которых могут возникнуть конфигурации и вы должны выяснить, в каком порядке они переопределяют друг друга
Может быть, это просто дело вкуса, но мне тоже интересно, почему люди предпочитают многословный, неуклюжий синтаксис XML, как:
<bean id="p1" class="Point" scope="prototype">
<property name="x">
<value>20</value>
</property>
<property name="y">
<value>80</value>
</property>
</bean>
над это:
p1 = new Point(20,80);
T его пример может показаться преувеличенным, но я говорю вам, что я видел хуже!
Это не мое намерение критиковать пружинный каркас сам по себе, он очень силен и является отличным ингредиентом во многих случаях. Мои проблемы касаются того, как предотвратить неправильное использование, как сохранить ремонтопригодность, как гарантировать качество и стабильность, как найти зависимости, как документировать код ... каков ваш опыт?
«Что такое ваш опыт» не является четко определенным вопросом с узнаваемо правильным ответом. Как вы пометите ответ как правильный? Пожалуйста, задайте свой вопрос более четко, чтобы мы знали, что вы ищете. Я могу, возможно, вывести некоторые вопросы типа «Как вы перемещаете зависимости в инфраструктуре инъекций зависимостей?» или «Каковы нынешние наилучшие методы организации весенних компонентов?» – Jay
Цель моего вопроса - не предлагать ответы на вопросы – Markus
Благодарим вас за разъяснение, что вы не намерены отмечать ответы как правильные. – Jay