Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Pattern для Web приложения


Автор: v2v 16.1.2008, 23:21
Итак, допустим, есть веб приложение (сайт) доступ на который возможен только для зарегистрированных пользователей. Сайт предоставляет для просмотра какой то набор данных плюс позволяет редактировать (удалять, добавлять) новые данные. допустим всё это будет на jsp страничках с использованием jstl. получается 4 - 5 страничек (не так уж много для начала).
но вопрос как это всё лучше всего организовать (какой шаблон использовать) ??

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

про фреймворки не писать/я их использовать не буду! 
j2ee core + patterns only!


Автор: batigoal 17.1.2008, 09:40
В первую очередь - MVC.

Автор: SuperFly 17.1.2008, 11:18
Цитата(v2v @  16.1.2008,  23:21 Найти цитируемый пост)
про фреймворки не писать/я их использовать не буду! 

Хех, в полку прибыло ^_^ а я уж думал это антинаучно. Слава богу Stampede человек авторитетный, в своем туториале обходился без всякого рода клея, может вам его почитать?
На самом деле там использовались JPA в качестве Model, Velocity в качестве View, а в качестве Controller свой FrontController и обработчики сценариев Worker'ы, всё.

Автор: v2v 17.1.2008, 11:38
хотелось бы обойтись и без сторонних библиотек.
поповоду темы stampede: там так много .... уже несколько раз начинал читать, доходил максимум до второго релиза )...

Цитата(batigoal @  17.1.2008,  09:40 Найти цитируемый пост)
В первую очередь - MVC. 

как мне связать jsp - view и данные.
вариант проверки и записиывание в аттрибуты сессии нужных данных в контроллере,  а затем на страничке просто считывание нужных аттрибутов?

Автор: batigoal 17.1.2008, 13:14
В страничке можно использовать бины. Например, бин - список людей (MembersList). Ну а в выводе, соответственно, итерировать по этому списку и выводить данные о пользователях.

Автор: v2v 17.1.2008, 13:45
ну собственно я про это и спрашиваю.
как мне передать бины на страничк? 
из странички вызывать контроллер, который получает memberList !?
или в контролере создавать атрибут memberList и далее вызывать нужную страничку, которая работает с атрибутами!?

вопрос поставлю по другому какую книгу почитать по сабжу.(так что бы её можно было найти напр. тут pdfchm.com)

Автор: batigoal 17.1.2008, 16:26
Цитата(v2v @  17.1.2008,  14:45 Найти цитируемый пост)
как мне передать бины на страничк? 

Смотря на какую страничку. У JSP это директива useBean, у JSF - не знаю.

Цитата(v2v @  17.1.2008,  14:45 Найти цитируемый пост)
вопрос поставлю по другому какую книгу почитать по сабжу

Можно почитать туториал по J2EE, но эта книга не очень-то заморачивается вопросом написания "правильных" веб-приложений.

Автор: v2v 17.1.2008, 18:32
ок. с этим вроде разобрался.
теперь вопрос следующий. производительность.
допустим наше приложение ещё обращается в бд .. оттуда достаёт кучу контента и выводит его пользователям/пользователей допустим достаточно много..( что то типо новостного сайта или форума с большими постами ), т.е. каждому пользователю формируется (почти) одинаковые данные. 
что необходимо учитывать , что-бы максимально выиграть в производительности? 

(опять таки интересуют вопросы правильного построения без использования фреймворков)

Автор: batigoal 17.1.2008, 23:35
От скриптлетов действительно нужно избавиться. Это всё можно сделать тегами.

Автор: v2v 17.1.2008, 23:41
Цитата(batigoal @  17.1.2008,  23:35 Найти цитируемый пост)
От скриптлетов действительно нужно избавиться. Это всё можно сделать тегами. 

предыдущий пост я заменил... читать его 

Автор: olegrolik 17.1.2008, 23:44
Цитата(v2v @ 17.1.2008,  13:45)
вопрос поставлю по другому какую книгу почитать по сабжу.(так что бы её можно было найти напр. тут pdfchm.com)


Присоединяюсь. Сам хотел создать подобный топик. Тоже хочу сделать движок для сайта. 
Читал тему "JSP - с чего начать". Не нравится JPA и Hibernate, Velocity устраивает.
Может у кого-то есть пример небольшого сайта, написанного на Java, где обязательно есть авторизация, реализованная через форму?

Автор: v2v 17.1.2008, 23:54
Цитата(olegrolik @  17.1.2008,  23:44 Найти цитируемый пост)

Может у кого-то есть пример небольшого сайта, написанного на Java, где обязательно есть авторизация, реализованная через форму? 

это действительно не сложно делается, сдам последний экзамен на сесии и постараюсь такй примерчик сделать с описанием.

http://forum.vingrad.ru/index.php?showtopic=191653&view=findpost&p=1383176

Автор: batigoal 18.1.2008, 00:33
Цитата(olegrolik @  18.1.2008,  00:44 Найти цитируемый пост)
Не нравится JPA и Hibernate

Почему? По-моему, это одна из лучших вещей, появившаяся в программировании за последние годы.


Цитата(v2v @  17.1.2008,  19:32 Найти цитируемый пост)
что то типо новостного сайта или форума с большими постами ), т.е. каждому пользователю формируется (почти) одинаковые данные. 
что необходимо учитывать , что-бы максимально выиграть в производительности? 

Кеширование, в первую очередь. Не нужно на каждых чих лазить в базу, если данная статья с высокой степенью вероятности понадобится почти каждому пользователю. То же относится и к разного рода служебной информации, которая по-любому будет нужна (например, счетчик статей на ресурсе, облако тегов или еще что-нибудь).

Еще стоит посмотреть на пулы соединений - может, пригодится.

Автор: v2v 18.1.2008, 01:12
я не большой знаток кеширования, поэтому непонятно как оно будет выыглядеть? создаются дополнительные таблици в базе данных и туда складываются готовые странички? ... хм... за счёт потери в памяти, можно немного преуспеть в производительности .... но не сильно... если например учитывать что контент будет хранится в бд уже в форматированном виде ( со всеми тегами ).

есть какие то механизмы кеширования. подскажите куда смотреть?

Автор: Stampede 18.1.2008, 06:52
Цитата(v2v @  17.1.2008,  08:32 Найти цитируемый пост)
что необходимо учитывать , что-бы максимально выиграть в производительности? 


А скажи, для чего тебе выигрывать в производительности?

Сгенерировать новостную страничку разумного размера при более-менее грамотной организации приложения и базы данных, да на нормальном железе - вопрос 50-200 мс. Можно, конечно, попытаться соптимизировать какие-то моменты и уложиться, скажем, в 20 мс, но возникает вопрос - зачем? На фоне неизбежной сетевой задержки выигрыш в несколько десятков миллисекунд практически не виден. Так стоит ли городить огород?

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

Если хочешь примеров - могу привести.

В общем, предлагаю подумать, нужно ли тебе это выжимание производительности и какую цену (в том числе в терминах пожервованной функциональности) ты готов за это заплатить.

Автор: Shaggie 18.1.2008, 08:39
Цитата(olegrolik @  17.1.2008,  23:44 Найти цитируемый пост)
пример небольшого сайта, написанного на Java, где обязательно есть авторизация, реализованная через форму?

Да вон у Stampede в подписи ссылочка на webjavenue.com, скачай оттуда туториал - там и Velocity, и JDBC, и авторизация через форму, только разобраться имхо непросто.

Автор: olegrolik 18.1.2008, 08:41
Цитата(batigoal @ 18.1.2008,  00:33)
Цитата(olegrolik @  18.1.2008,  00:44 Найти цитируемый пост)
Не нравится JPA и Hibernate

Почему? По-моему, это одна из лучших вещей, появившаяся в программировании за последние годы.


Неправильно выразился. Я просто хотел сказать, что, база данных у меня будет использоваться условно, т.е. обойтись можно и без неё. Затраты на изучение не будут стоить выхлопа smile

2 v2v, желаю успешной и скорейшей сдачи экзамена smile
2 Stampede, а примеров движков "попроще" нет?  smile  (имею ввиду тему "JSP - с чего начать?")


Автор: Kangaroo 18.1.2008, 10:52
Цитата(olegrolik @  18.1.2008,  07:41 Найти цитируемый пост)
 Я просто хотел сказать, что, база данных у меня будет использоваться условно, т.е. обойтись можно и без неё. Затраты на изучение не будут стоить выхлопа

А ты больше не собираешься других проектов делать? ORM сейчас уже почти неотъемлимая часть проекта, так что рекомендую выучить  smile 


Цитата(olegrolik @  18.1.2008,  07:41 Найти цитируемый пост)
 а примеров движков "попроще" нет?

А что значит "попроще"? Чем тебя там тема не понравилась. Там вроде классно все рассказано с нуля, то есть разобраться можно без проблем..

Автор: batigoal 18.1.2008, 10:53
Цитата(v2v @  18.1.2008,  02:12 Найти цитируемый пост)
я не большой знаток кеширования, поэтому непонятно как оно будет выыглядеть? 

Я имел в виду такой вариант кеширования, как загрузку данных из БД в память (при первом запросе либо при инициализации приложения) вместо залезания каждый раз в БД при запросе клиента. Например, на главной странице у тебя есть 10 последних постов/новостей. Тогда имеет смысл держать 10 экземпляров класса Post (или там Article) в памяти постоянно, и получится некоторая экономия на загрузке данных. 
(Разумеется, держать в памяти абсолютно все записи скорее всего будет невыгодно).

У нас подобный кеш модели данных организован на основе WeakReference, но это, наверное, для тебя будет слишком "тяжелым" решением.

Автор: olegrolik 18.1.2008, 17:08
Kangaroo, в ближайший месяц не собираюсь. Попроще -  значит без ORM.
Мы тут обсуждаем мои предпочтения или отписываемся по теме? smile 

Автор: v2v 24.1.2008, 19:44
Едем дальше в постороении нормального веб приложения.

Работа с бд.
тоже, наверное, есть какие то шаблоны. что посоветуете?

пока придумал следующее: написать класс, который  состоит из методов:
Код

executeSelect () 
executeUpdate ()
executeDelete ()
executeInsert ()

каждый из методов, в качестве параметра получает sql строку и выполняет соответствующее действие 
в базе ...
Единственный вопрос , что должен возвращать executeSelect() ? List каких то объектов (например List<Users>), 
но тогда для каждой таблици надо писать свою реализацию executeSelect() .. не подходит.

Что посоветуете.
благодарю.

Автор: Ornitos 31.1.2008, 15:35
Цитата(v2v @  24.1.2008,  19:44 Найти цитируемый пост)
Единственный вопрос , что должен возвращать executeSelect() ? List каких то объектов (например List<Users>), 
но тогда для каждой таблици надо писать свою реализацию executeSelect() .. не подходит.


Можно сделать метод генериком. В качестве аргумента передавать объект Class<T>. По класу выбирать подходящую таблицу.


Цитата(v2v @  24.1.2008,  19:44 Найти цитируемый пост)
Работа с бд.
тоже, наверное, есть какие то шаблоны. что посоветуете?


Существует целый ряд шаблонов. Поскольку требования твои мне не ведомы, читай и выбирай паттерн сам.
http://martinfowler.com/eaaCatalog/activeRecord.html
http://martinfowler.com/eaaCatalog/tableDataGateway.html
http://martinfowler.com/eaaCatalog/rowDataGateway.html
http://martinfowler.com/eaaCatalog/dataMapper.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)