Я являюсь частью команды, которая разрабатывает веб-приложение с использованием проприетарного фреймворка mvc.
Этот каркас ведет себя как распорки очень бедного человека! Он имеет центральный контроллер, конфигурацию в файле свойств, крутящий момент, как сгенерированные классы действий базы данных, и никаких компонентов формы.
Допустим, у вас есть экран редактирования учетной записи пользователя. Вот типичный фрагмент кода, который пишут разработчики:
Открытый класс Handler расширяет StupidFrameworkBaseHandler {
// This is analogous to Struts Action
// Handlers are invoked by your controller.
public void execute() {
// get form elements
}
}
}
Чтобы представить концепцию форм-бинов, был объявлен абстрактный метод getFormBean (), расширяющий класс StupidFrameworkBaseHandler. Этот метод будет вызываться классом BaseHandler. Итак, на данный момент код выглядит так:
public class Handler extends ExtendedStupidFrameworkBaseHandler {
public void execute() {
UserEditFormBean bean = (UserEditFormBean) baseBean;
// business layer classes.
}
public BaseBean getFormBean() {
// get HTTP Request parameters and build an object.
UserEditFormBean bean = new UserEditFormBean();
bean.setUser(httpRequest.getParam("whatever"));
// other setters...
}
return bean;
}
В более ранних приложениях, которые разрабатывались с использованием этой инфраструктуры, кодеры все кодировали в Handler - получение соединения БД, бизнес-логики и т. Д. Чтобы изменить это понятие бизнеса и уровня DAO, было введено в моем текущем приложении.
Итак, окончательный код выглядит примерно так:
public class Handler extends ExtendedStupidFrameworkBaseHandler {
public void execute() {
UserEditFormBean bean = (UserEditFormBean) baseBean;
UserBO busObj = new UserBO();
busObj.validateUserDetailsAndSave(bean); // I know this sucks..
}
public BaseBean getFormBean() {
// grab user input from form and return a form bean instance.
}
}
И бизнес-уровень выглядит так:
public UserBO extends BaseBO {
public void validateUserDetailsAndSave(UserEditFormBean bean) {
UserDAO dao = factory.getDao("user");
// call getters on bean, do some validations, throw business exceptions.
User objUser = new User();
object.setUserName(bean.getUserName());
// few more setters here on User -> that is the model.
dao.update(objUser);
}
}
Я считаю этот общий дизайн УЖАСНЫМ по многим причинам:
- UserBO - это класс, который не имеет состояния.
Это просто набор методов с
процессуальный код.
- Если вы называете их слоями,
тогда каждый слой не должен зависеть от
другой: UserBo всегда будет
ожидать один тип FormBean для каждого
метод и если бы я игнорировал HTML
и повторно использовать тот же класс BO из
автономное Java-приложение, я бы
никогда не сможет без создания
FormBeans как params.
- Код выглядит ужасно и
unmaintaineable.
Итак, мой вопрос здесь будет:
Разве вы не должны развивать бизнес-уровень независимо от уровня презентации? Я предпочел бы кодировать свои бизнес-объекты с надлежащим состоянием, проверкой и генерацией исключений?
Разве код, представленный в качестве примера выше, действительно плохой не-Java способ сделать это?