Comme je l'ai compris MVC, la logique du modèle doit également entrer dans le modèle lui-même - en faisant de chaque objet une entité auto-contenue. Cela signifie que les méthodes d'une classe doivent avoir des déclencheurs et des chaînes d'actions. Par exemple, l'utilisation de setZipCode (zip) dans une classe Person peut déclencher une action où elle recherche le code postal d'une table zip vers city, puis définit setCity (city) de la même manière.Implémentation de MVC lors de l'utilisation de JPA
Tout cela semble bien et tout, mais que se passe-t-il lorsque vous prenez une implémentation JPA dans l'image? Comme je le vois, les setters et getters de la classe doit être propre de toute logique supplémentaire, comme l'implémentation JPA les utilise pour construire les objets. Vous ne pouvez donc pas appeler setCity dans setZipCode. Nous avons fait le tour de ce projet avec lequel je travaille en déplaçant toute la logique spécifique au modèle vers la couche contrôleur. Au lieu d'appeler la personne directement dans ce cas, nous appellerions PersonController.setAddressInfo (zip) qui gère les deux, ou quelque chose comme ça. Peut-être une option plus agréable serait d'avoir des fonctions transitoires à l'intérieur de l'entité elle-même qui le fait. Donc voici ma question: ai-je manqué quelque chose de fondamental dans les principes de MVC ou JPA, ou MVC ne peut-il pas être totalement implémenté lors de l'utilisation d'une couche ORM? Serait-il préférable que les setters génériques et les getters soient privés pour JPA et que les classes aient une API publique séparée, transitoire, destinée aux développeurs? (Hibernate ne semble pas se soucier d'accéder à des méthodes privées pour une raison quelconque.)
Parmi les implémentations JPA nous utilisons Hibernate dans le projet, mon collègue a utilisé EclipseLink dans un autre projet et j'ai lu quelque chose sur OpenJPA dernièrement.