?

Log in

No account? Create an account

ru_java


ru.java

все о языке программирования java


Previous Entry Share Flag Next Entry
Spring Antipatterns
eye
xeye wrote in ru_java
Давно хочу собрать списочек того, как не надо писать со спрингом: широко распространенные антишаблоны, основные проблемы и кривые решения.

Из того, что сейчас вспомнил:

Избыточное использование xml-контекста для конфигурации:
конфиг, который должен служить для внятного описания связей и компонент приложения оказывается набит параметрами бинов, причем, часто нет никакого смысла в выносе этих параметров за пределы классов.

Вынос кода, определяющего суть класса в конфиг бина:
Например, вынос SQL кода из JDBC DAO в параметр бина в контексте.

Мнимое уменьшение зависимости:
Выносится только часть зависимости (потому, что "надо уменьшать зависимость"), но внутри класса остается жесткая привязка к конкретному типу, например через проверку instanceof (потому, что так "удобнее") в итоге только возрастает запутанность.

Зависимость приложения от IoC контейнера:
прямое обращение к контексту для получения нужного бина.

...добавляем, уважаемые читатели :)


  • 1
про вызов getBean +1 - самый страшный имхо грех %)

Согласен.

вызовы applicationContext.getBean("myBean") в Вашем коде - это антипаттерн.




Меня вообще спринг как IoC контейнер не радует. Constructor injection визуально уродлив, а точить все свои бины под то что любая пропертя в любой момент может измениться, либо использовать хак с afterPropertiesSet мне кажется лёгкой формой ереси :)

+1, Yan мне больше по душе. Но не мейнстрим.

Злоупотребление autowiring.

честно говоря, вообще не встречал автовайринга в массовых спринг-проектах.
подозреваю, что эта фича неизвестна большинству программистов

(no subject) (Anonymous) Expand
хорошо бы определить границы злоупотребления

>Вынос кода, определяющего суть класса в конфиг бина:
>Например, вынос SQL кода из JDBC DAO в параметр бина в контексте.

Не совсем понял.
Если имеется в виду, что конкретный sql DAO класс получает из xml, а не хранит в .java
То IMHO это напротив правильно.

Версии для разных sql серверов генерируются практически только заменой dao.xml

для этого есть iBatis, properties, свои классы инициализаторы и т.д.
но некоторые любят пихать SQL в основной и единственный спринг-конфиг

"Избыточное использование xml-контекста для конфигурации:
конфиг, который должен служить для внятного описания связей и компонент приложения оказывается набит параметрами бинов, причем, часто нет никакого смысла в выносе этих параметров за пределы классов."


Мир java разрабочиков полярен: с одной стороны фанаты jскриптовых языков, с другой ярые противники xml.

Я понял чем мне нравится spring xml: это предельно комфортная (со "строгой типизацией" в IDE ;-) для меня степень скриптизации.

Это не значит что надо все тащить в xml, но зачастую мы можем не догадываться, что некую "константу" неплохо бы поменять у конкретного клиента.

"Зависимость приложения от IoC контейнера"
я согласен. lookup-method и ServiceLocatorFactoryBean наше все.

но этот пункт отличный повод для холосрача!
фанаты других техник (google guice, ejb3) постоянно (хоть это есть и в spring) давят на то, что "look, ma! no xml!", а сплошные аннотации и как все зашибись.

как только мы написали аннотацию - мы привязали себя к конкретному контейнеру (хотя для ejb - spring, если я правильно прочитал, помогает переползти)

В теории спринг и EJB используют стандартные аннотации http://jcp.org/en/jsr/detail?id=250
Интересно, на практике их хватает?

- Один большой контекст-файл на всю аппликацию. Или два.
- environment-зависимые параметры в контекст-файле (порты, имена хостов, абсолютные paths, etc.)

Использование Spring в роли обертки над hibernate и только. Смотрится грустно.

По-моему, использование Spring это уже антипаттерн. Спринг не дает никаких преимуществ программисту. Так зачем же изначально усложнять проект - сложным он и так станет со временем
И вообще, через некоторое время Спрингу настанет копец - точно так же, как сейчас постепенно наступает копец Стратсу.
Не воспринимайте близко к сердцу - это мое субъективное мнение.

  • 1