Используется ли логика внутри сервлетов, сама модель или данные, которые они обрабатывают и передают в jsp, являются моделью? - PullRequest
1 голос
/ 30 марта 2012

В архитектуре MVC контроллер определяет, какой именно запрос пользователя должен обрабатываться каким компонентом (какой сервлет в случае Java EE ).Затем, используется ли внутри сервлета логика (вызывающая бизнес-методы или EJB и т. Д.), Которая используется для создания данных, которые должны быть переданы в представление, называемое моделью?

В некоторых книгах написано, чтосервлет передает модель JSP.В этом смысле модель - это данные, которые передаются в JSP.Каково правильное значение «модель» в типичной архитектуре Java EE ?

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Модель - это способ структурирования данных под вашим сервером.Таким образом, модель - это не данные, передаваемые в JSP, а структура данных, передаваемая в JSP.

При объяснении паттерна MVC всегда возникают сомнения.Некоторые люди говорят, что DTO (объект передачи данных) является моделью, jsp является представлением, а действия, выполняемые на сервере, являются контроллерами, но я слышал, по крайней мере, другое объяснение в случае архитектуры Java EE, которую я могусейчас не помню.

Однако мне нравится ваша (и завершенная мной) точка зрения лучше, чем другие вещи, которые я слышал до сих пор.

1 голос
/ 30 марта 2012

Модель может относиться как к "бизнес-модели", так и к "модели данных".Бизнес-модель также известна как «бизнес-делегаты», «доменные объекты», «фасады сервисов» или что-либо в этом смысле.В хорошо спроектированном веб-приложении Java EE в соответствии со стандартами именно классы EJB не используют JPA или любую логику доступа к БД напрямую , но далее делегируют другим классам EJB, которые являютсяОбъекты DAO.

Например,

@Stateless
public class ShoppingServiceLocal implements ShoppingService {

    @EJB
    private ProductDAO productDAO;

    @EJB
    private OrderDAO orderDAO;

    @Override
    public List<Product> searchProducts(String query) {
        return productDAO.find(query);
    }

    @Override
    public Order orderProduct(User user, Product product, int quantity) {
        product.setAvailable(product.getAvailable() - quantity);
        productDAO.update(product);
        Order order = new Order(user.getId(), product.getId(), quantity);
        orderDAO.create(order);
        return order;
    }

}

Обратите внимание, что, поскольку это EJB, ProductDAO#update() и OrderDAO#create() выполняются в одной транзакции.Поэтому, если при создании заказа возникает исключение, отредактированная доступность также не будет сохраняться.

«Модель данных» - это Product, User и Order в приведенном выше примере, которыйдолжны быть JPA @Entity javabeans.Это все, что знает сервлет (контроллер) и JSP (представление).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...