| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Размышления о легковесных контейнерах |
| Автор: Stampede 3.6.2008, 20:46 |
| Как вы уже догадались из названия, разговор у нас сегодня пойдет о легковесных контейнерах. Началась все с того, что я вот задумался, откуда у мекня столь стойкое неприятия Спринга, при том что я в свое время прочел книжку Рода Джонсона "J2EE Development without EJB" от корки до корки и всем сердцем принял излагаемые там идеи. С этим вопросом за пазухой полез я в инет и... практически не нашел сколько-нибудь серьезной критики Спринга. Но кое-что все-таки нарылось. Например вот это: http://crazybob.org/2006/01/i-dont-get-spring.html за авторством чувака из Гугла по имени Bob Lee. И в общем-то то что там написано действительно хорошо описывает мои собственные ощущения:
При этом отмечается, что есть у Спринга безусловно и очень сильные достоинства: декларативные транзакции, подтыкаемые имплементации многих сервисов, гибкий халявный ремоутинг и пр. Ну и тут же у меня возник закономерный вопрос: ну дак а что взамен Спринга-то? Что заюзать бедному девелоперу? И оказалось вот что: http://code.google.com/p/google-guice/ Полистал я доку, ознакомился. И знаете что скажу: а ведь это, братцы, прорыв. Может быть совсем скоро мне лично не придется изобретать велосипед, потому что все основные нужные мне вещи будут доступны в базовой поставке Guice. Вот такие вот новости с полей. Прошу высказываться. ЗЫ. Поиском на форуме нашел одно упоминание Guice от alexsmirnov, но это было сделано всколзь и с акцентом на другую интересную разработку, http://in.relation.to/Bloggers/GavinsBlog/Tag/Web+Beans. В общем, тема новая и актуальная |
| Автор: w1nd 3.6.2008, 22:03 |
| Как бы ни превозносились все эти "легковесные" фреймворки, легковесность их проистекает из новизны и бедности. Когда функционал дорастает до приемлемого, легковесность куда-то исчезает ;) Никогда не воспринимал серьёзно вариаций на тему "JEE без EJB". |
| Автор: fixxer 3.6.2008, 22:27 |
| w1nd, EJB3 уже сами по себе "легковесные" в сравнении с EJB2 |
| Автор: w1nd 4.6.2008, 00:08 |
Если простоту в использовании (мнимую, кстати) назвать легковесностью - то да |
| Автор: Maksym 4.6.2008, 00:11 |
| Stampede О каком сабсете функциональности Spring'а идет речь? В смысле, что конкретно хотим заменить? |
| Автор: fixxer 4.6.2008, 12:49 |
| Maksym, подозреваю, что в части Dependency Injection |
| Автор: Stampede 4.6.2008, 18:52 |
Во, спасибо за подсказку. А то я было даже как-то растерялся В общем, хочется, "чтобы у меня все было, и мне за это ничего не было" (с). В смысле, чтоб не приходилось программить в XML - ну не для того он предназначен. В Guice это достигается широким использованием аннотаций. Правда, некоторые вменяют это фреймворку в вину: мол, какое же это DI и IoC, если мы должны явно показывать пальцем, где чего фтыкать - само должно разруливать. Кроме того, говорят они, повсеместно раскиданные анотации делают код сильно зависимым от фреймвокра - нехорошо, инвазивно. Но позвольте, а чего же вы хотели, граждане? Где-то, как-то, но зависимости все равно нужно каким-то образом описать. Не хотите в аннотациях - флаг... то есть, простите, XML вам в руки. Только погодите: где-то мы такое уже видели - уж не в Спринге ли: раздутые конфиги, плохая тестабельность, кошмары рефакторинга... То есть если мы согласимся, что в вопросе выбора между аннотациями и конфигами аннотации выигрывают (особенно так как это сделано в Guice: типобезопасно и удобно), то останется, по сути, лишь одно возражение: кастомные аннотации. Так вот, кастомные они лишь до тех пор, пока их не канонизировали. А принимая во внимание тенденции в JCP (скажем, стандартизацию ОРМ в форме JPA, или скриптинга на базе Rhino), за этим дело не заржавеет. Потому что уж больно безобразная складывается ситуация с IoC контейнерами: продуктов все прибавляется, а порядка не видать. Так вот осмелюсь предположить, что путь, который выбрали авторы Guice - он гораздо прямее ведет к канонизации чем путь Спринга, который давно уже перестал быть просто контейнером, и включать в SE такого монстра в мало-мальски самодостаточном объеме ни у кого рука не поднимется. Плюс не забываем, что за Guice стоит ни много ни мало сам Гуголь - даже если не деньгами, то фигурой. Так штааа... |
| Автор: COVD 4.6.2008, 19:02 | ||
я как-то видел реплику на rsdn , мол , когда у меня в проекте больше 2 классов, всегда использую Спринг, а то легко запутаться с порядком инициализации |
| Автор: fixxer 4.6.2008, 19:56 |
| Stampede, вопрос такой, а как у guice обстоят дела со вторым китомспринга - АОП? На мой взгляд именно аспекты, позвояющие с легкостью реализовывать фукционал ортогональный основному (такой как, например, секьюрити и транзакционность), позвоили спрингу претендовать на место EJB. Кстати по поводу аннотаций в спринге http://weblogs.java.net/blog/seemarich/archive/2007/11/annotation_base_1.html За подробностями - в спринговый референс. Конечно какой-то минимальный хмл остается, но перспектива кодить giuce'овский биндер мне пока кажется не менее сомнительной. Хотя может я еще не распробовал. |
| Автор: xeye 5.6.2008, 00:49 | ||
Ваще-то почти все эти беды - это не ограничения спринга, это "общепринятые" способы его использования. если вам не нравятся хмл конфиги (мне не нравятся) никто не запрещает производить конфигурацию контекста программным образом, получая полную поддержку рефакторинга. джус вносит другие проблемы - аннотации в коде не то, чтобы привязывают вас к конкретному IoC контейнеру, но они устраняют прозрачность. лучшее API - это остутствие API, лучший контейнер - тот, которого не заметно. сходите на сайт пикоконтейнера, почитайте их документацию и примеры, посмотрите исходный код, внимательно прочитайте раздел про паттерны и антипаттерны. использовать ли пикоконтейнер в ваших приложениях - дело десятое. важно, что после вдумчивого чтения скорее всего вы уже будете использовать тот же спринг несколько иначе. настоящая беда спринга - он стал мэйнстримом и одной большой либой на все случаи жизни. любая технология такого уровня начинает использоваться в 70% не там, где надо и не так, как надо (и не теми, кому надо |
| Автор: xeye 5.6.2008, 12:55 | ||||
ну, поверьте на слово, это удобно забавно, что spring MVC не использует в полной мере возможности спринга, как IoC. т.е. это не проблема спринга, это чисто проблема использования. проблема в том, что сами авторы не смогли подать красивый и внятный пример мощного использования IoC. в итоге имеем систему быстро нагоняющую EJB по монстричности. пример web MVC на основе пикоконтейнера : http://waffle.codehaus.org/ опять же, это не совет использовать именно пикоконтейнер или ваффл - это пример того, как надо интегрировать IoC контейнеры в приложении, так, чтобы они решали проблемы, а не добавляли новые. |