|
|
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
Вот смотрите. Есть у меня веб-приложение. Есть опеределнные классы бизнес-логики. Я не понимаю, что мне даст, если я буду выносить эти классы в отдельные сервисы. Почитал весь сайт по хивмайнд от корки до корки. Ну даст мне эта технология разделение логики по сервисам. А без хивмайнда тоже есть разделение логики, только по классам (в каждом классе своя логика). Ну не надо будет мне писать создание объекта в коде, зато нужно писать getter и делать несколько строк записи в xml-файле. Разве это упрощает разработку? Все только разносится по разным файлам. А взять конфигурейшн пойнт. Они говорят, что удобно, что сразу все конфигурации из xml заганяются в классы. А если я буду использовать properties файлы, то у меня получение конфигурации тоже будет очень простое. Честное слово, почитал все доки, как работает понял, а что даст на практике, не понимаю... Объясните, пожалуйста, популярно, что мне даст использование технологии хивмайнд. Всем заранее большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 14:48 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
Если проводить аналогию со Spring, то технология IoC (Inverion of Control) может избавить код от поиска необходимых ресурсов и сосредоточиться на реализации бизнес-логики. Ну например, есть слой классов, работающих с БД через JDBC. Можно придумать уйму способов, откуда брать Connection. Вместо реализации фабрик, которые бы загружали драйвер JDBC, создавали соединение, или же искали соединение по JNDI, или же еще как его получали, выносим всю конфигурацию наружу! Собственно, использование getter и setter сохраняет инкапсуляцию объектов. А если использовать автоматическое привязывание объектов по имени или типу (опять Spring), то можно избежать лавинообразного (сильно сказано, конечно) разрастания размера xml файла. А ведь (опять) Spring не просто IoC контейнер, но еще и прослойка для управления транзакциями с БД через Hibernate или JDBC, например, применения бозопасности, RPC и еще много чего. И все без модификации Java кода (ну только если расширить че-нить не понадобится). Возможно, Hivemind чего-то из этого набора не имеет, тем не менее опыт свидетельствует, что это очень даже упрощает жизнь. Кстати, чем же все-таки разработчикам Hivemind Spring не угодил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 17:34 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
2 Vital: авторОбъясните, пожалуйста, популярно, что мне даст использование технологии хивмайнд. по аналогии со Spring, вы перестанете програмировать в Java и начнете програмировать в XML. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 18:36 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
OUпо аналогии со Spring, вы перестанете програмировать в Java и начнете програмировать в XML. Это вы с сарказмом? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 18:38 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
2 Vital: авторЭто вы с сарказмом? ;) Нет, это факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 18:50 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
OU2 Vital: авторЭто вы с сарказмом? ;) Нет, это факт. То-есть, программировать в xml лучше чем в JAVA? 2BlackWall: Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 18:59 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
2 Vetal: авторТо-есть, программировать в xml лучше чем в JAVA? я думаю нет, поклонники Spring and etc. очевидно думают подругому ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 19:08 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
Если я описываю бины в XML документе, это еще не значит что я перестаю писать на Джаве. К тому же, некоторые стандартные вещи таки приходится дописывать и расширять. Хотелось бы услышать обоснование, чем применение Spring может дать отрицательный результат. Конечно, если работодатель готов платить за изобретение все новых колес, то конечно, почему не сделать, например, RPC по-своему. Вот только покажите мне такого работодателя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 11:05 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
Позволю себе привести цитату из статьи Фаулера: Inversion of control is a common feature of frameworks, but it's something that comes at a price. It tends to be hard to understand and leads to problems when you are trying to debug. So on the whole I prefer to avoid it unless I need it. This isn't to say it's a bad thing, just that I think it needs to justify itself over the more straightforward alternative. The key difference is that with a Service Locator every user of a service has a dependency to the locator. The locator can hide dependencies to other implementations, but you do need to see the locator. So the decision between locator and injector depends on whether that dependency is a problem. Using dependency injection can help make it easier to see what the component dependencies are. With dependency injector you can just look at the injection mechanism, such as the constructor, and see the dependencies. With the service locator you have to search the source code for calls to the locator. Modern IDEs with a find references feature make this easier, but it's still not as easy as looking at the constructor or setting methods. A lot of this depends on the nature of the user of the service. If you are building an application with various classes that use a service, then a dependency from the application classes to the locator isn't a big deal. In my example of giving a Movie Lister to my friends, then using a service locator works quite well. All they need to do is to configure the locator to hook in the right service implementations, either through some configuration code or through a configuration file. In this kind of scenario I don't see the injector's inversion as providing anything compelling. The difference comes if the lister is a component that I'm providing to an application that other people are writing. In this case I don't know much about the APIs of the service locators that my customers are going to use. Each customer might have their own incompatible service locators. I can get around around some of this by using the segregated interface. Each customer can write an adapter that matches my interface to their locator, but in any case I still need to see the first locator to lookup my specific interface. And once the adapter appears then the simplicity of the direct connection to a locator is beginning to slip. Since with an injector you don't have a dependency from a component to the injector, the component cannot obtain further services from the injector once it's been configured. A common reason people give for preferring dependency injection is that it makes testing easier. ..................... So the primary issue is for people who are writing code that expects to be used in applications outside of the control of the writer. In these cases even a minimal assumption about a Service Locator is a problem. и ниже по коду: When building application classes the two are roughly equivalent, but I think Service Locator has a slight edge due to its more straightforward behavior. However if you are building classes to used in multiple applications then Dependency Injection is a better choice. Исследуя это все, прихожу к выводу, что есть ситуации, когда IoC следует использовать, а есть ситуации, когда его использование неокупается. Если я пишу приложение, использующее различные сервисы, и это приложение будет использоваться другими разработчиками в других командах, то однозначно IoC, чтобы те люди могли реализовывать свои сервисы. Если приложение использует различные сервисы, но приложение будет использоваться только одной командой разработчиков, то можно использовать и Service Locator, и IoC. Но Service Locator проще, IoC красивее. Разницу большую не вижу. Но я совершенно не вижу смысла применять IoC везде для каждого класса бизнес-логики. Например, пускай я пишу модуль для отдела кадров. Нужно реализовать прецедент приема на работу. Я не вижу смысла выносить метод приема на работу в сервис, подключаемый через IoC к некоему классу. Ведь этот метод специфичный для организации и используется только в одном месте. То-есть, я говорю о том, что если у меня есть специфическая бизнес-логика, которая используется только в одном месте и только в моей команде, не вижу никакого смысла использовать ни Service Locator, ни IoC для убирания зависимостей между классами бизнес-логики. Единственный случай, когда я вижу смысл использовать IoC в специфическом бизнес-приложении, это использование системных сервисов наподобие подключения в приложение кеша или использование внешних источников данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 14:32 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
VetalЕдинственный случай, когда я вижу смысл использовать IoC в специфическом бизнес-приложении, это использование системных сервисов наподобие подключения в приложение кеша или использование внешних источников данных. Случаи наподобие этого не единственные, а повсеместные. IoC не ради IoC, а ради облегчения тестирования, конфигурирования, расширения, упрощения и т.д. Тем не менее, не панацея от плохо продуманной архитектуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2006, 19:24 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
2 BlackWall: авторЕсли я описываю бины в XML документе, это еще не значит что я перестаю писать на Джаве. К тому же, некоторые стандартные вещи таки приходится дописывать и расширять. Хотелось бы услышать обоснование, чем применение Spring может дать отрицательный результат. Конечно, если работодатель готов платить за изобретение все новых колес, то конечно, почему не сделать, например, RPC по-своему. Вот только покажите мне такого работодателя... Почему я против Spring. Естественно все вещи в одном топике не уместишь да и нет желания тратить на это время, поэтому коротко о главном. Да, еще, не расценивайте этот топик как религиозное "Нет Spring!". Spring это фреймворк и весьма вероятно что в различных ситуациях его использование логично и оправдано, но... 1. Концепция IOC не нова и подразумевает, как и любой концепт, множество различных решений (Помимо Spring есть множество решений так или иначе решающих проблему IOC). Имплементация подобных решений не обязательно означает изобретения колеса. А существующие решения основаные на классических design patterns и проверенные временем никому еще вреда не приносили. К примеру, для создания своего DAO вы преспокойно можете использовать решения описанные (включая UML, документация и примеры) на сайте SUN, IBM, etc в разделе 2ЕЕ. Естественно вам никто не запрещает использовать компоненты DAO сторонних разработчиков. Разница может быть, и как правило бывает, в том что при аналогичном уровне качества вам потребуется использовать гораздо меньше компонентов чем целый фреймворк. 2. IOS нужен только там где он действительно нужен. К примеру, у нас есть обьект BasicDataSource который мы хотим инициализировать в run time. Естественно, настройки для инициализации этого обьекта мы будем брать из properies файлов. Пользуясь Spring для решения этой задачи нам надо будет создать XML файл содержащий параметры для нашего ApplicationContextFactory или XMLContextFactory. Затем в этом файле мы опишем PropertyConfigurer и передадим ему наш properties файл в качестве источника. В нашем Java коде мы естественно инициализирыем ApplicationContextFactory или XMLContextFactory и затем инициализируем наш обьект BasicDataSource. Все просто и замечательно благодаря концепту IOC. Основная проблема может заключаться в том что для решения такой простейшей проблемы нам понадобиться включать в приложение целый фреймворк. Второй аспект в том что решение такой примитивной задачи требует у нас второго источника кода в виде XML файла. На первый взгляд появление XML файла не вызовет у нас беспокойства, разве что небольшое неудобство. Так ли это мы увидим дальше. На данный момент мы просто можем задать себе логичный вопрос, а можно ли решить эту проблему проще? Безусловно можно и притом гораздо легче (естественно о качестве решения мы не забываем, основываясь на проверенных временем примерах и design patterns). В любом случае мы идеально использовали IOC для решеня проблемы, хотя и заплатили за это лишними компонентами фреймворка и XML файлом. Давайте теперь усложним задачу и примем во внимание что наша система будет использована на нескольких машинах и что на каждой машине наш properties файл будет иметь разные параметры. К примеры создаем приложение, пишем shell script который определяет машину (development, UAT или production) и передает соответствующий properties файл в виде системного аргумента в наше приложение. Использыя Spring мы выполним действия описанные выше за исключением того что нам нужно будет создать дополнительный обьект Resource который будет отображать содержимое нашего properties файла в run time основываясь на системном параметре (вспомните для чего мы писали shell script). Дополнительно нам понадобиться описать данный обьект в нашем XML файле. В любом случае, задача решена отлично, все работает правильно. Но за это мы заплатили лишним обьектом Resource и дополнительными записями в XML. Ну это еще не конец света конечно. Давайте еще раз усложним задачу. Допустим наш properties файл должен хранить только праметры для работы с базой данных, а хранить пароли и логины мы будем в другом файле, общем для всех приложений. Таким образом у нас будет два properties файла. Возвращаемся к нашему проекту и повторяем предидущие действия. В этот раз однако нам понадобится второй обьект Resource с аналогичной функцией (отображать содержимое properties файла). Естественно мы продолжаем редактировать наш XML файл включая в него описание нового обьекта и поправляем PropertiesConfigurer чтобы он брал данные из нескольких файлов одновременно. Опять же все у нас работает замечательно. За исключением того что мы создали второй обьект необходимый для работы со Spring и увеличили содержимое XML файла. Теперь давайте подумаем о том что будет с нашим XML файлом если мы будем продолжать описывать в нем конфигурации Spring? А ведь мы рассмотрели приметивнейший, хотя и реальный пример. Мы не работали с сылками на другие beans, мы не создавали sub beans и тд. И работали мы всего то с одним обьектом BasicDataSource. Легко предположить каким станет наш XML фаил, или файлы, если мы будем продолжать в том же духе. Ирония состоит в том что мы для решения определенной проблемы должны искуственно создавать дополнительные трудности в виде дополнительных обьектов и XML ресурсов. Можно было бы решить первоначальную задачу проще? Безусловно, и ничуть не хуже. 3.Мы упоминали другие фреймворки и стандарты. Основной из этих стандартов EJB, которому Spring противопостовляется чаще всего. Один из аргументов Spring, в том что EJB достаточно сложен. Это может быть правдой, он безусловно не легок. Но и Spring требует знаний не намного меньших. Другой аргумент Spring в том что EJB привязывает ваше приложение к определенной технологии. Ну во первых Spring делает то же самое привязывая ваше приложение к Spring. А во вторых в привязывании приложения к EJB нет ничего негативного - EJB это определенная технология, поэтому вы используете данную технологию для решения каких то задач. При этом EJB, в отличие от Spring , это технология основаная на стандартах поддерживаемыми громадным количеством производителей и пользователей. К тому же в EJB 3 есть масса улучшений которые делают его использование проще и еффективнее. Ну и последне, над EJB в отличие от Spring работают гораздо больше и тшательнее, что согласитесь один из важнейших факторов. 4. Общий концепт Spring подразумевает специфические знания которые могут быть применены в очень ограниченном числе фреимворков. Отсюда вопрос, зачем требовать от разработчиков узких и очень специфических знаний вместо того чтобы поощрать развитие уже имеющихся общепринятых навыков? Есть точка зрения что Spring стимулирует использование design patterns. Это не неверно. Если разработчик не хочет или не может пользоваться design patterns, никакой Spring не заставит его никто это делать. Не лучше ли стимулировать таких разработчиков к использованию очевидных и фундаментальных вещей вместо того чтобы толкать их к использованию субьективных подходов? Есть мнение что Spring прост в использовании. Это не совсем так. Как и любая вещь он требует знаний и опыта. Я видел кучу примеров когда люди используют Spring всего лишь для инициализации POJO обьектов. Выглядит эта мотня из XML фаилов ужасно. На вопрос аргументировать использования POJO в ответ обычно выглядит так: ну это же IOC. Да, ну и что дальше? Ну Spring же контейнер. Да, ну и что дальше? Ну мы же можем конфигурировать IOC. Да, ну и что дальше? То есть люди не особо понимают смысл определенных вещей. И от этих ошибок в итоге страдают их коллеги и весь проект. 5.Этот пункт в принципе продолжение предыдущего. Дело в том что использование Spring может породить кучу проблем с поддержкой приложения. Скажем, ваше приложение исользует Spring очень интенсивно. Со временем разработчики покидают вашу команду и приходят новые люди. Так вот, даже если у вас содержится полная документация вашего приложения (а это очень большое если во многих случаях к сожалению) вашему разработчику понадобится потратить время на изучение самого Spring . Хотите найти тех кто уже хорошо знает Spring? Ну флаг вам в руки и электричка на встречу :) Гораздо легче найти хорошего специалиста в EJB чем хорошего в Spring. В общем это мое мнение, ни в коем случае никому не навязываемое. Это просто мой опыт и мои наблюдения. Наверняка я упустил кучу вещей (AOP and etc) о которых думал паралельно с написанием топика. Если появятся мысли постараюсь их выложить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2006, 00:38 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
OU Во-первых Spring != IoC, IoC это только часть библиотеки (хотя и центральная). Так что говорить, что есть другие реализации IoC я думаю не стоит, так как на сегодня только в Spring реализован общий подход на основе IoC/AOP/DAO etc. Во-вторых, мне кажется, что вы не до конца понимаете назначение библиотеки. Там как раз основной целью было облегчение тестирования и сопровождения. А основным лозунгом, что одно из самых ценных качеств ООП - это возможность объекта быть заменяемым. При этом этих целей они добились на 100% - а вы пишите наоборот. Также вы пишите что Spring привязывает приложении к технологии. Это не так - он как раз ничего (точнее его IoC часть) не привязывает, а как раз наоборот. Весь Spring-specific код - это код xml-файла. Сами же объекты полностью лишены каких-либо зависимостей от Spring. Imho это не сравнимо с EJB2 где зависимость огромна. Да кстати, тот же EJB3 тоже перешел на IoC. Можно было бы решить первоначальную задачу проще? Безусловно, и ничуть не хуже. интересно как? захардкодить? да уж ни чем не хуже. Мне лично не ясно, почему имея 2 файла (2 ресурса) вы стараетесь скрыть это в коде приложения. Их два есть и два будет в Spring'е - так что тут не так? PS> Вообще мое мнение на счет Spring'а - это на редкость полезный и верный продукт - один из лучших framework'ов для java. А Rod Johnson, один из толковейших архитекторов, который смог придумать и реализовать действительно новую и полезную идею ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2006, 10:40 |
|
||
|
Объясните плиз популярно, в чем преимущества использования hivemind
|
|||
|---|---|---|---|
|
#18+
2 funikovyuri: авторВо-первых Spring != IoC, IoC это только часть библиотеки (хотя и центральная). Так что говорить, что есть другие реализации IoC я думаю не стоит, так как на сегодня только в Spring реализован общий подход на основе IoC/AOP/DAO etc. а где вы видели что я ставил знак равенства между S и IOC? Как вы сказали IOC является одним из основных концептов S и именно по этому поводу я его и упомянул. Естественно мои замечания относятся к тому как S реализует IOC, а не к IOC самому по себе. Да S предоставляет дополнительные возможности по сравнению с аналогичными фреймворками. Наверняка какие то решения в S реализованы лучше а какие то хуже чем где то. Тем не менее это не делает S чем то особенным или суперполезным. Во всяком случае не всегда. авторВо-вторых, мне кажется, что вы не до конца понимаете назначение библиотеки. Там как раз основной целью было облегчение тестирования и сопровождения. А основным лозунгом, что одно из самых ценных качеств ООП - это возможность объекта быть заменяемым. При этом этих целей они добились на 100% - а вы пишите наоборот. Какое из моих высказываней натолкнуло вас на эту мысль? Да S добился этой цели на 100% как вы сказали. Я это как раз таки подтверждал по ходу приведенного примера. Мой аргумент состоит в том что S требует дополнительных ресурсов в виде лишних обьектов и xml файлов. авторТакже вы пишите что Spring привязывает приложении к технологии. Это не так - он как раз ничего (точнее его IoC часть) не привязывает, а как раз наоборот. Весь Spring-specific код - это код xml-файла. Сами же объекты полностью лишены каких-либо зависимостей от Spring. Imho это не сравнимо с EJB2 где зависимость огромна. Да кстати, тот же EJB3 тоже перешел на IoC. Опять же речь не идет об IOC а как раз о том как S реализует этот концепт. ИМХО избыточное использование xml и разнос кода (особенно без необходимости) только усложняет работу с проэктом. Вы с этим не согласны? авторинтересно как? захардкодить? да уж ни чем не хуже. Мне лично не ясно, почему имея 2 файла (2 ресурса) вы стараетесь скрыть это в коде приложения. Их два есть и два будет в Spring'е - так что тут не так? почему бы и нет? Чем плоха хорошая реализация в java по сравнению с хорошей реализацией в xml? авторPS> Вообще мое мнение на счет Spring'а - это на редкость полезный и верный продукт - один из лучших framework'ов для java. А Rod Johnson, один из толковейших архитекторов, который смог придумать и реализовать действительно новую и полезную идею Возможно вы правы, но пока что я остаюсь при своем мнении. Да S не плохой продукт, да он решает определенные задачи. Но я не считаю что он имеет свои недостатки как и любой другой продукт. С госодином Rod Johnson я кстати встречался несколько раз, хотите от вас пламенный привет передам :)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2006, 12:58 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=711&tid=2148659]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 356ms |

| 0 / 0 |
