|
|
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Petro123- я против и XML и DI поголовного. Поголовное всё плохо. Это да. Речь идет о том, что при программирование бизнес-приложений DI очень хорош. Снимается лишняя головная боль "а где мне взять класс" и при необходимости снимается головная боль "а как мне тут это поменять". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 10:11:20 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
LeonidvСнимается лишняя головная боль "а где мне взять класс" и при необходимости снимается головная боль "а как мне тут это поменять". вот вся причина. Тему можно закрывать. - забыл где взять класс и написано так, что проблема "поменять". Всё выяснили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 10:15:54 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Petro123, Я непонимаю твой поток сознания, spring это реализация IoC, мой пример с xml только потому что это настройка для соединения с базой, можно обойтись вообще без xml, можно разделить xml на логические куски(ввиде отдельных xml файлов) чтоб не пугаться 3000 строк. Но речь не о том, а о подходе. Мне реально интересно в каких проектах и с каким ТЗ это принесет зло? Есть пример такой задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 10:40:39 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
GregTk, Я говорю вроде очевидные вещи. Мы не секта, и говорить что всегда нужен спринг - глупо. Можно спорить о кол-ве классов или размере проектов (3,5- 500). imho Зло он не принесёт. Он принесёт оверхед, который нельзя измерить. >Есть пример такой задачи? Здесь их 4: - нужен ли спринг для инжекции класса логгера - твой пример0 - мой пример1 и 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 10:50:47 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
GregTkPetro123, Я непонимаю твой поток сознания, spring это реализация IoC, мой пример с xml только потому что это настройка для соединения с базой, можно обойтись вообще без xml, можно разделить xml на логические куски(ввиде отдельных xml файлов) чтоб не пугаться 3000 строк. Но речь не о том, а о подходе. Мне реально интересно в каких проектах и с каким ТЗ это принесет зло? Есть пример такой задачи? spring это НЕ реализация IoC. На этом надо остановиться ;) Spring - это фреймворк, один из компонент которого реализует IoC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 11:00:53 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Озверин, полностю согласен, но как не странно этот компонет один из самых важных при работе со Spring Framework ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 11:53:14 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
GregTkОзверин, полностю согласен, но как не странно этот компонет один из самых важных при работе со Spring Framework пока тут речь шла об удобствах программиста (про конфиг классов у заказчика опустим). Сомнительный критерий для Важности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 11:56:03 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Я один ни в одном посте Petro123 так и не понял, что же он конкретно хотел сказать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 16:25:24 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
fixxerЯ один ни в одном посте Petro123 так и не понял, что же он конкретно хотел сказать? Он считает что Spring XML, как и DI вообще это оверхед на целом ряде проектов. Как он пришел к таким выводам, я не очень понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 16:31:04 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
При этом всё прибито к единственной session factory и чтобы перейти на работу, например, с двумя базами нужно весь код перелопатить? Для того чтобы перейти на работу с двумя базами, надо будет в каждом месте, где используется база, указать, где используется первая база, а где вторая. Для этого в любом случае придется перелопатить весь проект. В примере Petro надо будет просто заменить HibernateUtil.getSessionFactory().openSession() на HibernateUtil.getAnotherSessionFactory().openSession() - это минимальная правка, короче никак нельзя сделать. Т.е. вот такой копипаст в десятке-сотне методов это норм.? Используйте AspectJ если вам сложно написать такой код. AspectJ не требует никаких спрингов и прочих DI. Вообще в Java тупой копипаст неизбежен. Пример - фильтрация списка: List<SomeBusinessObject> newList = new ArrayList<SomeBusinessObject>(); for(SomeBusinessObject o : oldList) if(satisfiesSomeCriteria(o))) newList.add(o); У меня в эклипсе есть даже сниппеты для операций со списками. В C# код выглядит примерно так: var newList = oldList.Filter({satisfiesSomeCriteria(_)}) Мне кажется странным бороться с копипастом в одном отдельно взятом месте (открывание и закрывание транзакций) с помощью таких тяжелых средств, как генерация кода в рантайме с помощью многомегабайтных либ, при том что рядом будет еще более ужасный копипаст. Вообще так можно дойти до идиотизма - открывать и закрывать файлы с помощью AOP: @FileOperation(file="config.properties",mode=Mode.WRITE,) void saveConfigToFile(Config cfg){ FileOutputStream os = FileUtils.getOutputStream();//аналог Spring DataSourceUtil.getConnection() cfg.write(os); // do not close stream - it will be automagically closed by AOP } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 16:35:24 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
fixxerЯ один ни в одном посте Petro123 так и не понял, что же он конкретно хотел сказать? когда у тебя Java в профиле будет меньше 80% тогда поймёшь. (Без обид, по доброму) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 16:41:53 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
авторкогда у тебя Java в профиле будет меньше 80% тогда поймёшь. Согласен. Java - весьма своеобразный и мир, нельзя на нем зацикливаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 16:48:49 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪДля того чтобы перейти на работу с двумя базами, надо будет в каждом месте, где используется база, указать, где используется первая база, а где вторая. Для этого в любом случае придется перелопатить весь проект. В примере Petro надо будет просто заменить HibernateUtil.getSessionFactory().openSession() на HibernateUtil.getAnotherSessionFactory().openSession() - это минимальная правка, короче никак нельзя сделать. А, если мне нужно один и тот же метод в разных базах, в зависимости от контекста? Это всё нормально настраивается при DI, но в примере Petro123 - опять перелопачивать все DAO. Я лишь показываю как в конкретное данном примере изменения, внешние для слоя DAO начинают менять код самих DAO. Это очень показательный пример, который показывает как статические синглтоны убивают полиморфизм, который можно сохранить при использовании DI. Мы же не говорим конкретно о работе DAO или Hibernate. Мы сравниваем - статический синглтон HibernateUtil.getSessionFactory() с DI. Очевидно что статический синглтон не обладает полиморфизмом и является глобальной переменной. Поэтому код с его использованием вызывает большую волну изменений. Чем при использовании DI, где зависимости подменить проще и за счет этого волна изменений гасится быстрее. Йуный джавистЪИспользуйте AspectJ если вам сложно написать такой код. AspectJ не требует никаких спрингов и прочих DI. Я не спрашивал как именно сделать лучше. Я лишь указал на недостаток кода, который был приведен как контрпример DI. Причем не самый удачный. Йуный джавистЪВообще в Java тупой копипаст неизбежен. Тут есть нюансы. Во-первых вы правы в том что в некоторых случаях копипаст в Java проще. Потому что если применять функциональные подходы на генериках и анонимных классах, то результат приведет к коду в два раза больше и раз в пять сложнее для чтения. Хотя функциональный код вообще сложнее для чтения и фильтры это классический пример. Во-вторых не так давно я осознал что копипаст местами не такое уж и зло. Например в GUI формах. Которые часто подвержены изменениям, переиспользование кода часто усложняет дальнейшие более тонкие и индивидуальные изменения. Ну, и в-третих вы правы, это все же к DI имеет не самое прямое отношение. Можно тему копипаста дальше не развивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 16:51:37 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪИспользуйте AspectJ если вам сложно написать такой код. AspectJ не требует никаких спрингов и прочих DI. некоторым может показаться, что спор о спринге. на самом деле он о проектировании классов. я думаю нашему "программисту" AspectJ нужен еще меньше, чем IOC. Йуный джавистЪВообще в Java тупой копипаст неизбежен. Пример - фильтрация списка: В C# код выглядит примерно так: var newList = oldList.Filter({satisfiesSomeCriteria(_)}) прошу любить и жаловать, commons collections (generic разновидность) запись менее компактна в силу понятных причин однако Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 16:57:02 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, я не понял твоей хотелке "поиметь" сразу 2 БД. Ты в рантайме ПОЛЬЗОВАТЕЛЕМ хочешь менять. Или конфигом аппСервера или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 16:58:26 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Petro123я не понял твоей хотелке "поиметь" сразу 2 БД. Ты в рантайме ПОЛЬЗОВАТЕЛЕМ хочешь менять. Или конфигом аппСервера или как? Речь не о 2х БД пользователях и пр. Речь о сравнении статических синглтонов (Singleton.getInstance()) и не статических DI. Есть статический метод getSessionFactory(). Он не обладает полиморфизмом. Соответсвенно проблема - не может быть двух SessionFactory без значительных изменений в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 17:04:51 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Есть статический метод getSessionFactory(). Он не обладает полиморфизмом. Можно ранее в треде устанавливать ThreadLocal переменную, которую getSessionFactory() потом будет читать. Тогда getSessionFactory() становится полиморфным. В Common Lisp, например, System.out является полиморфным из коробки посредством использования похожего механизма (dynamic scoping). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 17:29:27 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪМожно ранее в треде устанавливать ThreadLocal переменную, которую getSessionFactory() потом будет читать. Тогда getSessionFactory() становится полиморфным. В Common Lisp, например, System.out является полиморфным из коробки посредством использования похожего механизма (dynamic scoping). ThreadLocal подходит только многопоточного сервера. И таким образом вы утверждаете что ThreadLocal лучше чем полноценный полиморфизм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 17:32:53 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
ThreadLocal подходит только многопоточного сервера. Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 17:38:40 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСоответсвенно проблема - не может быть двух SessionFactory без значительных изменений в коде может я ничего не понял. Но на кой мне Две фабрики? Это же синглетон - статика? Все конфиги-варианты через XML хибера (до загрузки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 17:39:12 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Если хочешь - приводи задачу с одной базой и изменение в требованиях, которое требует вторую базу. Я напишу сначала код, который выполняет исходную задачу, потом отрефакторю под новые требования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 17:42:13 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪBlazkowicz Если хочешь - приводи задачу с одной базой и изменение в требованиях, которое требует вторую базу. Я напишу сначала код, который выполняет исходную задачу, потом отрефакторю под новые требования. +1 а то я туплю и не врубился в фичу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 17:43:54 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪПочему? Потому что GUI, например, однопоточный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 17:51:55 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Petro123может я ничего не понял. Но на кой мне Две фабрики? Например, для работы с разными БД. Petro123Это же синглетон - статика? Эта статика у тебя прописана в каждом DAO - глобальная не полиморфная зависимость. Petro123Все конфиги-варианты через XML хибера (до загрузки). ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 17:55:23 |
|
||
|
Дублирую здесь вопрос по Spring
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪЕсли хочешь - приводи задачу с одной базой и изменение в требованиях, которое требует вторую базу. Я напишу сначала код, который выполняет исходную задачу, потом отрефакторю под новые требования. Ещё раз. Базы тут не причем. Проблема двух баз это не самоцель. Это следствие использование статического синглтона. Лучше ты объясни почему статический синглтон лучше чем DI? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 17:56:46 |
|
||
|
|

start [/forum/topic.php?fid=59&startmsg=37702017&tid=2132331]: |
0ms |
get settings: |
17ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
70ms |
get topic data: |
23ms |
get forum data: |
6ms |
get page messages: |
92ms |
get tp. blocked users: |
3ms |
| others: | 340ms |
| total: | 585ms |

| 0 / 0 |
