Как я понял в MVC, логика модели должна также входить в саму модель, что делает каждый объект автономным. Это означает, что методы класса должны иметь триггеры и цепочки действий. Например, использование setZipCode (zip) в классе Person может вызвать действие, в котором он ищет почтовый индекс из таблицы zip to city, а затем устанавливает для этого setCity (city) то же самое.
Все это кажется красивым и все такое, но что произойдет, если вы возьмете какую-нибудь реализацию JPA в картину? На мой взгляд, установщики и получатели класса должны быть очищены от всей дополнительной логики, поскольку реализация JPA использует их для создания объектов. Поэтому вы не можете вызвать setCity внутри setZipCode. Мы обошли этот проект, над которым я работаю, переместив всю логику, специфичную для модели, на уровень контроллера. Вместо прямого вызова Person в этом случае мы должны вызвать PersonController.setAddressInfo (zip), который обрабатывает и то, и другое, или что-то вроде этого. Возможно, лучшим вариантом было бы иметь временные функции внутри самого объекта, который это делает.
Итак, вот мой вопрос: пропустил ли я что-то фундаментальное в принципах MVC или JPA, или MVC не может быть полностью реализован при использовании уровня ORM? Было бы лучше, если бы общие сеттеры и геттеры были частными для JPA, а классы имели бы отдельный общедоступный, временный API, предназначенный для разработчиков? (По некоторым причинам Hibernate не возражает против доступа к приватным методам.)
Из реализаций JPA, которые мы используем в проекте, мой коллега использовал EclipseLink в другом проекте, и в последнее время я кое-что читал об OpenJPA.