|
|
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
После советов попытаться разобраться с классическим фреймворком и долгих обызываний меня ламером я сел и посветил свое время его изучению. Простые приложения собрал, вроде логику проектирования понял, с интернационализацией вроде проблем не было, поделал простенькие Form beans(от actionforms). Возник вопрос с базой(я пока просто цепляюсь через jdbc к MSSQLSERV). Во первых как оно правильно делается!!! Во вторых есть ли принципиальная разница где коннектится в Action(действие) или в ActionForms(form bean). Что то мне подсказывает что по правильному должно быть=в одном месте должно прописываться. Опять извеняюсь за ламерство!!! Но уж что есть то есть!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 12:35:18 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
Почитайте о шаблоне MVC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 12:41:32 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
Дело в том что в сервлет контроллере я перенаправляю обработку к различным Action,которые возвращают значения на основе которые я далее раскручиваю логику(передаю упрвление jsp или другим обьектам). Мои Action могут использовать Beans, или обьекты унаследованные от ActionForm. Дело в том что мне нужно наполнять мои Beans из базы (пока только делаю в конструкторе бина или действия). Пока считаю это очень криво!!! Как делается правильно!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 12:58:04 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
Имел ввиду что коннект к базе делаю в конструкторе!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:02:14 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
ChooseВо вторых есть ли принципиальная разница где коннектится в Action(действие) или в ActionForms(form bean). Выше уже посоветовали MVC, но боюсь этого не достаточно, хорошо бы так же глянуть паттерн DAO. Он очень простой. А так же хотя бы получить представление что такое слои архитектуры. Ни в Action ни в ActionForms писать код работы с базой не стоит. Эти классы уже сформированы и у них есть достаточно специфичная роль. Добавляя туда работу с базой ты как бы нарушаешь инкапсуляцию - одну из основ ООП. Код который находится в Action должен реализовывать задачи контроллера из MVC. На вскидку это выбор и наполнение View, трансформация данных из запроса (ActionForms) в бизнес модель, и вызов бизнес логики. ActionForms это просто удобный контейнер для хранения данных запроса. В принципе один из вариантов это в Action использовать методы DAO. Хотя я бы ещё и ввел дополнительный слой между ними. Со Struts давно не работал, не помню как рекомендуется строить взаимодействие Action с бизнес логикой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:06:47 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
автор Код который находится в Action должен реализовывать задачи контроллера из MVC. На вскидку это выбор и наполнение View, трансформация данных из запроса (ActionForms) в бизнес модель, и вызов бизнес логики. ActionForms это просто удобный контейнер для хранения данных запроса. В принципе один из вариантов это в Action использовать методы DAO. Хотя я бы ещё и ввел дополнительный слой между ними. Со Struts давно не работал, не помню как рекомендуется строить взаимодействие Action с бизнес логикой. Задачи контроллера в стратс выполняет сервлет-контроллер: http://www.roseindia.net/struts/understanding_struts_controller.shtml Выполнять запросы из Action и ActionForms нехорошо, как уже посоветовали DAO здесь поможет. ActionForms это же просто бины, их можно инициализировать где вам угодно и положить в сессию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:18:04 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
Меня интересует не код для работы с базой(селекты,наполнения результ сетов), так как я это делаю в Actions. А интересует организация коннекта к базе!!!(сonnection con =driver...). Я извеняю что прочитал не так много об этом паттерне, в даднный момент этим занимаюсь!!! Ответ найду, но как скоро!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:20:42 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
ХОрошо!!! Ссылочкой не поделитесь о DAO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:22:31 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
авторМеня интересует не код для работы с базой(селекты,наполнения результ сетов), так как я это делаю в Actions. А интересует организация коннекта к базе!!!(сonnection con =driver...). Коннект можно оформить в виде пула и непариться (connection pool). DAO в инете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:30:23 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
ТимоНЗадачи контроллера в стратс выполняет сервлет-контроллер: http://www.roseindia.net/struts/understanding_struts_controller.shtml Угу, подзабыл я Struts. Так это выходит что Action все же выполняет часть функций контроллера это раз. А два то что если бизнес логику помещать в Action, то выходит что она будет завязана на Struts framework и как следствие не сильно реюзабельна. Или как эти 2 порблемы решаются со Struts? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:30:25 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
ChooseМеня интересует не код для работы с базой(селекты,наполнения результ сетов), так как я это делаю в Actions. А интересует организация коннекта к базе!!!(сonnection con =driver...). Я извеняю что прочитал не так много об этом паттерне, в даднный момент этим занимаюсь!!! Ответ найду, но как скоро!!! Эти проблемы решаются через конфиг и фабрику. Вообще посмотри как это делается в Spring. Кстати в доке к Spring можно найти и примеры DAO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:31:55 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
СПАСИБО!!! Читаю уже!!! ЗЫ Хоть без этих =ДА ТЫ ЛАМЕР, иди на google!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:33:49 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
автор Угу, подзабыл я Struts. Так это выходит что Action все же выполняет часть функций контроллера это раз. А два то что если бизнес логику помещать в Action, то выходит что она будет завязана на Struts framework и как следствие не сильно реюзабельна. Или как эти 2 порблемы решаются со Struts? Ок, какие функции по вашему должен выполнять контроллер? Вообще, при правильном использовании шаблона MVC (в данном случае Struts) можно менять части приложения (M, V или C) , без перекодирования других слоев! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:34:54 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
ТимоНОк, какие функции по вашему должен выполнять контроллер? Наполнение View данными. Я правильно понял что это происходит в Action? ТимоНВообще, при правильном использовании шаблона MVC (в данном случае Struts) можно менять части приложения (M, V или C) , без перекодирования других слоев! Ну, это не совсем так. Определенные зависимости всегда есть. Или что понимается под "перекодированием". Я вот про что. Если бизнес логику писать в Action, то Action выходит это модель. А в MVC рекомендуется чтобы модель была независима от C и V. То есть при желании заметить Struts на что-то друго уже не получится. А так же использовать бизнес логику из другого фасада тоже. Еже ли бизнес логику абстрагировать от Action. То функциональность в Action выродится в контроллер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 13:52:55 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
авторНаполнение View данными. Я правильно понял что это происходит в Action? Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента * Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера), изменяя свое состояние . * Представление (View). Отвечает за отображение информации (пользовательский интерфейс). * Контролер (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции. авторНу, это не совсем так. Определенные зависимости всегда есть. Или что понимается под "перекодированием". Видимо несовсем точно выразился, допустим меняется дизайн - меняем только View. Меняется источник данных xml, jdbc, ... - меняем Model. Слои недолжны взаимосависимыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 14:40:00 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
http://www.berdaflex.com/ru/eclipse/books/rcp_filemanager/ch04s06.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 14:42:06 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
ТимоН авторНаполнение View данными. Я правильно понял что это происходит в Action? Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента * Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера), изменяя свое состояние . * Представление (View). Отвечает за отображение информации (пользовательский интерфейс). * Контролер (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции. Это не отвечает на мой воспрос. ТимоН авторНу, это не совсем так. Определенные зависимости всегда есть. Или что понимается под "перекодированием". Видимо несовсем точно выразился, допустим меняется дизайн - меняем только View. Меняется источник данных xml, jdbc, ... - меняем Model. Слои недолжны взаимосависимыми. В хорошей архитектуре никакие слои не должны быть взаимосависимыми. Это не только к MVC относится. Ну и вообще пример не удачный меняем, то не меняется это. А например меняем модель меняется всё и контроллер и вьюхи. 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 15:00:14 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
авторЭто не отвечает на мой воспрос. Вобщем да в Action, я думаю и так понятно что нестоит весь код писать в методе execute, следует разработать архитектуру приложения это и будет вашей моделью. авторА например меняем модель меняется всё и контроллер и вьюхи. 8) Немогли бы вы привести небольшой пример? А я приведу пример которым сам часто пользуюсь. Допустим есть интерфейс dataGetter и его потомки dataGetterORA, dataGetterXML, и еще хз сколько. Этот интерфейс реализует шаблон DAO, т.е. на выходе метода getData у нас какой нибудь бин или коллекция. А разруливается какой именно потомок нужен - фабрикой. Т.о. если поменять источник данных или поменять логику ничего кроме модели переписвать ненадо! Вьюха как отображала эти бины или коллекции так и будет. А контроллер тут вообще нипричем :) Интересно взглянуть на ваш вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 15:24:12 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
ТимоН авторЭто не отвечает на мой воспрос. Вобщем да в Action, я думаю и так понятно что нестоит весь код писать в методе execute, следует разработать архитектуру приложения это и будет вашей моделью. Спасибо, теперь я понял почему не использую struts. Надо ещё разрабатывать свое решение чтобы абстрагировать бизнес логику от Struts. ТимоН авторА например меняем модель меняется всё и контроллер и вьюхи. 8) Немогли бы вы привести небольшой пример? Не очень понял пример чего Вы ищете. Суть MVC в чем? Модель (которая не только данные но и бизнес логика) абстрагирована от реализации UI. И она от UI не зависит. Зато UI от нее напрямую. И контроллер и вью оба слоя зависят от модели. И изменения послденей влекут изменения в других слоях. Зато сама модель ни от кого не зависит. По этому куда угодно портируется с легкостью. Контроллер и вью взаимо зависимы. Хотя конечно дизайн максимально инкапсулирован во view и на контроллер влияет слабо. Я это все к чему? "Вообще, при правильном использовании шаблона MVC (в данном случае Struts) можно менять части приложения (M, V или C) , без перекодирования других слоев" - очень размытое и слишком общее заявление достоинств MVC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 15:40:45 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
Choose я сам ламер не давно только пишу на J2EE(servelets/JSP+struts+JDBC) (пока без hibernate) ну у нас это делается так ... отдельно создается файл типа RDMSRepository.java в нем пишутся конекты к базе ввиде функций .. а дальше вызываются в Action ... наверно не точна написал .. могу уточнить .. (всетаки конец рабоч. дня ... ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 18:34:44 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
saff я сам ламер не давно только пишу на J2EE(servelets/JSP+struts+JDBC) (пока без hibernate) ну у нас это делается так ... отдельно создается файл типа RDMSRepository.java в нем пишутся конекты к базе ввиде функций .. а дальше вызываются в Action ... наверно не точна написал .. могу уточнить .. (всетаки конец рабоч. дня ... ) Это отвратительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 22:29:19 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
saff Choose я сам ламер не давно только пишу на J2EE(servelets/JSP+struts+JDBC) (пока без hibernate) ну у нас это делается так ... отдельно создается файл типа RDMSRepository.java в нем пишутся конекты к базе ввиде функций .. а дальше вызываются в Action ... Уточни если не сложно!!! Наверно это не так уж и отвратительно!!! Для не больших проектов в самый раз!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 06:04:49 |
|
||
|
Как правильно!!(Struts)
|
|||
|---|---|---|---|
|
#18+
постараюсь уточнить ... создаюется файл типа RDMSConstant.java такого содержания ... в нем содержутся select и вызовы процедур (в примере Oracle procedure PL/SQL ) public class RDMSConstants { // --- Procedures & Functions public static final String DICT_QEUR_GET_ABROAD_STAY_CAUSES = "SELECT OID, NAME, short_name FROM user.hr_abroad_stay_causes ORDER BY short_name"; public static final String DICT_QEUR_GET_EDUCATION_DEGREES = "SELECT OID, NAME, short_name FROM user.hr_education_degrees ORDER BY short_name"; .......................... public static final String DICT_PROC_REGISTER_ABROAD_STAY_CAUSE = "BEGIN user.pkg_dictionary.register_abroad_stay_cause (:OID,:NAME,:SHORT_NAME,:NOTE,:FK_STATE_OID); END;"; public static final String DICT_PROC_EDIT_ABROAD_STAY_CAUSE = "BEGIN user.pkg_dictionary.edit_abroad_stay_cause (:OID,:NAME,:SHORT_NAME,:NOTE,:FK_STATE_OID); END;"; public static final String DICT_PROC_REMOVE_ABROAD_STAY_CAUSE = "BEGIN user.pkg_dictionary.remove_abroad_stay_cause (:OID,:FK_STATE_OID); END;"; // ------------------------------ след. файл RDMSRepository.java одна из его функций .... ....................... static public String registerAbroadStayCause(User user, BlablaClass blablaClass) throws SQLException { Connection connection = null; String oracleErrorMessageCode = null; CallableStatement userLoginStmt = null; try { connection = getDatabaseConnection(user.getUserName(), user.getPassword()); System.out.println(RDMSConstants. DICT_PROC_EDIT_ABROAD_STAY_CAUSE); // это уже понятно становится .. userLoginStmt = connection.prepareCall(RDMSConstants. DICT_PROC_REGISTER_ABROAD_STAY_CAUSE); synchronized (userLoginStmt) { userLoginStmt.registerOutParameter(1, java.sql.Types.INTEGER); userLoginStmt.setString(2, abroadStayCause.getName()); userLoginStmt.setString(3, abroadStayCause.getShortName()); userLoginStmt.setString(4, abroadStayCause.getNote()); userLoginStmt.setInt(5, Constants.ACTIVE_STATE); userLoginStmt.execute(); connection.commit(); } userLoginStmt.close(); connection.close(); } catch (SQLException e) { oracleErrorMessageCode = Tools.getOracleErrorMessageCode(e); System.out.println(e.getMessage()); } return oracleErrorMessageCode; } .................................. дальше в классе вызывается сие функция ... пример ... SaveAbroadStayCauseAction.java import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForm; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForward; import org.pronet.hr.dictionaries.actionforms.AbroadStayCauseForm; import org.apache.struts.action.Action; import org.pronet.hr.entities.User; import javax.servlet.http.HttpSession; ..................... ................... ............... try { Repository.registerAbroadStayCause(user, abroadStayCause); // в user класс передается юзернайм, пассворд и прочие ... } catch (SQLException ex) { System.out.println(ex); } } ................................ ................... ............... так надеюсь я более понятние обяснил ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 11:48:54 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34289588&tid=2146797]: |
0ms |
get settings: |
12ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
48ms |
get topic data: |
19ms |
get forum data: |
4ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 336ms |
| total: | 540ms |

| 0 / 0 |
