powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно!!(Struts)
23 сообщений из 23, страница 1 из 1
Как правильно!!(Struts)
    #34289321
Choose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После советов попытаться разобраться с классическим фреймворком и долгих обызываний меня ламером я сел и посветил свое время его изучению.
Простые приложения собрал, вроде логику проектирования понял, с интернационализацией вроде проблем не было, поделал простенькие Form beans(от actionforms).
Возник вопрос с базой(я пока просто цепляюсь через jdbc к MSSQLSERV).
Во первых как оно правильно делается!!!
Во вторых есть ли принципиальная разница где коннектится в Action(действие) или в ActionForms(form bean).
Что то мне подсказывает что по правильному должно быть=в одном месте должно прописываться.
Опять извеняюсь за ламерство!!!
Но уж что есть то есть!!!
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289358
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитайте о шаблоне MVC.
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289440
Choose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том что в сервлет контроллере я перенаправляю обработку к различным Action,которые возвращают значения на основе которые я далее раскручиваю логику(передаю упрвление jsp или другим обьектам).
Мои Action могут использовать Beans, или обьекты унаследованные от ActionForm.
Дело в том что мне нужно наполнять мои Beans из базы (пока только делаю в конструкторе бина или действия). Пока считаю это очень криво!!!
Как делается правильно!!
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289460
Choose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имел ввиду что коннект к базе делаю в конструкторе!!!
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289476
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChooseВо вторых есть ли принципиальная разница где коннектится в Action(действие) или в ActionForms(form bean).


Выше уже посоветовали MVC, но боюсь этого не достаточно, хорошо бы так же глянуть паттерн DAO. Он очень простой. А так же хотя бы получить представление что такое слои архитектуры.

Ни в Action ни в ActionForms писать код работы с базой не стоит. Эти классы уже сформированы и у них есть достаточно специфичная роль. Добавляя туда работу с базой ты как бы нарушаешь инкапсуляцию - одну из основ ООП.

Код который находится в Action должен реализовывать задачи контроллера из MVC. На вскидку это
выбор и наполнение View, трансформация данных из запроса (ActionForms) в бизнес модель, и вызов бизнес логики.

ActionForms это просто удобный контейнер для хранения данных запроса. В принципе один из вариантов это в Action использовать методы DAO. Хотя я бы ещё и ввел дополнительный слой между ними. Со Struts давно не работал, не помню как рекомендуется строить взаимодействие Action с бизнес логикой.
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289522
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Код который находится в Action должен реализовывать задачи контроллера из MVC. На вскидку это
выбор и наполнение View, трансформация данных из запроса (ActionForms) в бизнес модель, и вызов бизнес логики.

ActionForms это просто удобный контейнер для хранения данных запроса. В принципе один из вариантов это в Action использовать методы DAO. Хотя я бы ещё и ввел дополнительный слой между ними. Со Struts давно не работал, не помню как рекомендуется строить взаимодействие Action с бизнес логикой.

Задачи контроллера в стратс выполняет сервлет-контроллер:
http://www.roseindia.net/struts/understanding_struts_controller.shtml

Выполнять запросы из Action и ActionForms нехорошо, как уже посоветовали DAO здесь поможет. ActionForms это же просто бины, их можно инициализировать где вам угодно и положить в сессию.
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289539
Choose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меня интересует не код для работы с базой(селекты,наполнения результ сетов), так как я это делаю в Actions.
А интересует организация коннекта к базе!!!(сonnection con =driver...).
Я извеняю что прочитал не так много об этом паттерне, в даднный момент этим занимаюсь!!!
Ответ найду, но как скоро!!!
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289548
Choose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ХОрошо!!!
Ссылочкой не поделитесь о DAO
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289587
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМеня интересует не код для работы с базой(селекты,наполнения результ сетов), так как я это делаю в Actions.
А интересует организация коннекта к базе!!!(сonnection con =driver...).

Коннект можно оформить в виде пула и непариться (connection pool).
DAO в инете...
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289588
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНЗадачи контроллера в стратс выполняет сервлет-контроллер:
http://www.roseindia.net/struts/understanding_struts_controller.shtml


Угу, подзабыл я Struts. Так это выходит что Action все же выполняет часть функций контроллера это раз. А два то что если бизнес логику помещать в Action, то выходит что она будет завязана на Struts framework и как следствие не сильно реюзабельна.

Или как эти 2 порблемы решаются со Struts?
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289596
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChooseМеня интересует не код для работы с базой(селекты,наполнения результ сетов), так как я это делаю в Actions.
А интересует организация коннекта к базе!!!(сonnection con =driver...).
Я извеняю что прочитал не так много об этом паттерне, в даднный момент этим занимаюсь!!!
Ответ найду, но как скоро!!!

Эти проблемы решаются через конфиг и фабрику. Вообще посмотри как это делается в Spring. Кстати в доке к Spring можно найти и примеры DAO.
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289607
Choose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО!!!
Читаю уже!!!
ЗЫ Хоть без этих =ДА ТЫ ЛАМЕР, иди на google!!!
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289614
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Угу, подзабыл я Struts. Так это выходит что Action все же выполняет часть функций контроллера это раз. А два то что если бизнес логику помещать в Action, то выходит что она будет завязана на Struts framework и как следствие не сильно реюзабельна.

Или как эти 2 порблемы решаются со Struts?
Ок, какие функции по вашему должен выполнять контроллер?
Вообще, при правильном использовании шаблона MVC (в данном случае Struts) можно менять части приложения (M, V или C) , без перекодирования других слоев!
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289701
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНОк, какие функции по вашему должен выполнять контроллер?
Наполнение View данными. Я правильно понял что это происходит в Action?

ТимоНВообще, при правильном использовании шаблона MVC (в данном случае Struts) можно менять части приложения (M, V или C) , без перекодирования других слоев!
Ну, это не совсем так. Определенные зависимости всегда есть. Или что понимается под "перекодированием".

Я вот про что. Если бизнес логику писать в Action, то Action выходит это модель. А в MVC рекомендуется чтобы модель была независима от C и V. То есть при желании заметить Struts на что-то друго уже не получится. А так же использовать бизнес логику из другого фасада тоже.

Еже ли бизнес логику абстрагировать от Action. То функциональность в Action выродится в контроллер.
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289877
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНаполнение View данными. Я правильно понял что это происходит в Action?

Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента

* Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера), изменяя свое состояние .
* Представление (View). Отвечает за отображение информации (пользовательский интерфейс).
* Контролер (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.

авторНу, это не совсем так. Определенные зависимости всегда есть. Или что понимается под "перекодированием".
Видимо несовсем точно выразился, допустим меняется дизайн - меняем только View. Меняется источник данных xml, jdbc, ... - меняем Model. Слои недолжны взаимосависимыми.
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289887
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.berdaflex.com/ru/eclipse/books/rcp_filemanager/ch04s06.html
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34289962
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоН авторНаполнение View данными. Я правильно понял что это происходит в Action?

Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента

* Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера), изменяя свое состояние .
* Представление (View). Отвечает за отображение информации (пользовательский интерфейс).
* Контролер (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.

Это не отвечает на мой воспрос.


ТимоН авторНу, это не совсем так. Определенные зависимости всегда есть. Или что понимается под "перекодированием".
Видимо несовсем точно выразился, допустим меняется дизайн - меняем только View. Меняется источник данных xml, jdbc, ... - меняем Model. Слои недолжны взаимосависимыми.
В хорошей архитектуре никакие слои не должны быть взаимосависимыми. Это не только к MVC относится. Ну и вообще пример не удачный меняем, то не меняется это. А например меняем модель меняется всё и контроллер и вьюхи. 8)
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34290053
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭто не отвечает на мой воспрос. Вобщем да в Action, я думаю и так понятно что нестоит весь код писать в методе execute, следует разработать архитектуру приложения это и будет вашей моделью.

авторА например меняем модель меняется всё и контроллер и вьюхи. 8)
Немогли бы вы привести небольшой пример?

А я приведу пример которым сам часто пользуюсь. Допустим есть интерфейс dataGetter и его потомки dataGetterORA, dataGetterXML, и еще хз сколько. Этот интерфейс реализует шаблон DAO, т.е. на выходе метода getData у нас какой нибудь бин или коллекция. А разруливается какой именно потомок нужен - фабрикой. Т.о. если поменять источник данных или поменять логику ничего кроме модели переписвать ненадо! Вьюха как отображала эти бины или коллекции так и будет. А контроллер тут вообще нипричем :)

Интересно взглянуть на ваш вариант.
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34290124
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоН авторЭто не отвечает на мой воспрос. Вобщем да в Action, я думаю и так понятно что нестоит весь код писать в методе execute, следует разработать архитектуру приложения это и будет вашей моделью.

Спасибо, теперь я понял почему не использую struts. Надо ещё разрабатывать свое решение чтобы абстрагировать бизнес логику от Struts.

ТимоН авторА например меняем модель меняется всё и контроллер и вьюхи. 8)
Немогли бы вы привести небольшой пример?


Не очень понял пример чего Вы ищете. Суть MVC в чем? Модель (которая не только данные но и бизнес логика) абстрагирована от реализации UI. И она от UI не зависит. Зато UI от нее напрямую.
И контроллер и вью оба слоя зависят от модели. И изменения послденей влекут изменения в других слоях. Зато сама модель ни от кого не зависит. По этому куда угодно портируется с легкостью. Контроллер и вью взаимо зависимы. Хотя конечно дизайн максимально инкапсулирован во view и на контроллер влияет слабо.

Я это все к чему?
"Вообще, при правильном использовании шаблона MVC (в данном случае Struts) можно менять части приложения (M, V или C) , без перекодирования других слоев" - очень размытое и слишком общее заявление достоинств MVC.
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34290845
saff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Choose

я сам ламер не давно только пишу на J2EE(servelets/JSP+struts+JDBC) (пока без hibernate)
ну у нас это делается так ...

отдельно создается файл типа RDMSRepository.java в нем пишутся конекты к базе ввиде функций ..

а дальше вызываются в Action ...

наверно не точна написал .. могу уточнить .. (всетаки конец рабоч. дня ... )
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34291249
saff
я сам ламер не давно только пишу на J2EE(servelets/JSP+struts+JDBC) (пока без hibernate)
ну у нас это делается так ...

отдельно создается файл типа RDMSRepository.java в нем пишутся конекты к базе ввиде функций ..

а дальше вызываются в Action ...

наверно не точна написал .. могу уточнить .. (всетаки конец рабоч. дня ... )
Это отвратительно.
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34291446
Choose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
saff Choose

я сам ламер не давно только пишу на J2EE(servelets/JSP+struts+JDBC) (пока без hibernate)
ну у нас это делается так ...

отдельно создается файл типа RDMSRepository.java в нем пишутся конекты к базе ввиде функций ..

а дальше вызываются в Action ...


Уточни если не сложно!!!
Наверно это не так уж и отвратительно!!!
Для не больших проектов в самый раз!!!
...
Рейтинг: 0 / 0
Как правильно!!(Struts)
    #34292103
saff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
постараюсь уточнить ...

создаюется файл типа 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);
}
}
................................
...................
...............



так надеюсь я более понятние обяснил ??
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно!!(Struts)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]