Question

sur mon entreprise, nous développons une application de type ERP utilisant java et jsf. À ce jour, l'équipe de conception a identifié environ 20 entités, chacune possédant des propriétés différentes. Généralement, nous construisons 20 pages de CRUD. Existe-t-il une meilleure solution? Nous utilisons hibernate comme accès à la base de données. Nous avons donc eu l’idée d’un DAO unique pour cette partie du système. Avez-vous été confronté à une situation similaire? Quelles sont vos pensées à ce sujet?

Était-ce utile?

La solution

Vous pourriez envisager de générer du code avec ces 20 écrans, un peu comme l'échafaudage de Ruby. En ce qui concerne DAO, vous pouvez extraire les opérations CUD de certains IBusinessObjectDao génériques, en laissant des opérations R spécifiques (interrogation à l'aide de divers paramètres) à des implémentations DAO concrètes.

Autres conseils

Vous devriez vraiment regarder dans Seam. Il possède une fonctionnalité appelée Seam-Gen qui procédera au reverse engineering de l'intégralité des pages CRUD de votre application à partir de la base de données. Vous pouvez modifier les modèles Seam-Gen (basés sur Freemarker) pour personnaliser les pages à générer selon vos préférences.

J'utilise le plugin Eclipse Azzurri Clay pour modéliser ma base de données et générer le DDL. Je lance ensuite Seam-Gen et en quelques secondes, vous avez une application en cours d'exécution. C'est une combinaison très pratique.

Je sais qu'il est tard, mais je pense que mon petit cadre conviendrait parfaitement à cette situation. Consultez http://code.google.com/p/happyfacescrud/ . Il offre une recherche immédiate, des composants personnalisés qui reconnaissent le type de données de l'entité, un modèle de données paresseux et la flexibilité que les générateurs de code ne peuvent pas offrir. Voici un exemple de page avec une page avec une datable paresseuse et une recherche:

    <hf:searchPanel columns="4" backingBean="#{accountBean}">
        <hf:searchField label="#{messages['account.accountNumber']}" field="accountNumber" />
        <hf:searchField label="#{messages['account.active']}" field="active" isMessage="true" />
        <hf:searchEntityField label="#{messages['account.customer']}" field="customer" childField="name" popup="true" />
        <hf:searchField label="#{messages['account.openingDate']}" field="openingDate" rangeSearch="false" />
    </hf:searchPanel>
    <hf:dataList label="#{messages['account.search.results']}" backingBean="#{accountBean}">
        <hf:column label="#{messages['account.accountNumber']}" field="accountNumber" />
        <hf:column label="#{messages['account.active']}" field="active" isMessage="true" />
        <hf:column label="#{messages['account.customer']}" field="customer" childField="name" entityView="/pages/customerEdit.xhtml" popupFields="email,phone,address" />
        <hf:column label="#{messages['account.openingDate']}" field="openingDate" isDate="true" />
        <hf:actionsColumn />
    </hf:dataList>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top