Comment doit-on aller sur le filtrage d'une série d'objets de domaine en fonction des critères définis par l'utilisateur? Les méthodes de filtrage devraient-elles être dans le modèle ou devraient-elles être dans le DAO?Filtrer par le modèle ou dao?
Répondre
Si vous souhaitez utiliser vos objets de modèle uniquement (principalement) en tant que conteneurs de données, vous devez placer le filtre dans les DAO que vous utilisez déjà. Il est recommandé de s'assurer que les critères définis par l'utilisateur sont indépendants de la base de données (donc, passez votre propre objet de filtre au lieu de passer par exemple des requêtes Hibernate Criteria.
Ensuite, vos méthodes de DAO peuvent ressembler à ceci:
public interface BeanDao
{
List<Bean> findAllByFilter(BeanFilter filter);
}
Le choix de récupérer un plus grand nombre d'objets, puis filtrer ou simplement pour récupérer les bons objets en premier lieu dépend des données sous-jacentes . La plupart des applications utiliseront une combinaison des deux.
Les choses que j'estimerait:
bande passante réseau & Mémoire requise
Si, après filtrage, il y a un petit nombre de résultats, mais un nombre beaucoup plus grand de résultats avant de filtrer alors il pourrait être un perte de bande passante et de ressources mémoire pour faire le filtrage dans le code.
vitesse de requête
Filtrage des résultats dans la base de données peut être plus cher que de faire la logique dans le code - disque vs mémoire. Les index sont nécessaires pour le rendre utile.
maintenabilité
Création de nouvelles requêtes peuvent prendre beaucoup de temps. Cela signifiera certainement écrire quelques sql et revisiter les différentes phases de test. Il peut être nécessaire de modifier le schéma db, par exemple en ajoutant un index pour accélérer la requête.
Lors de la résolution de ce problème en Java, il pourrait être utile d'envisager le modèle des visiteurs. J'utilise souvent deux interfaces SingleMatcher et MultipleMatcher pour filtrer une collection d'objets. Les implémentations de ceux-ci peuvent être combinées pour créer de nouveaux critères définis par l'utilisateur. Un autre avantage de ceci est qu'une fois que vous avez un matchers les utilisateurs peuvent vouloir utiliser, vous n'aurez pas à revenir à l'essai pour créer de nouveaux critères.
- 1. Un DAO par thread ou DAO threadsafe?
- 2. Meilleure pratique pour le modèle DAO?
- 3. modèle pour transférer le modèle de recherche à dao
- 4. Filtrer par rangées
- 5. Loi de Déméter et modèle DAO
- 6. Filtrer le site global par le tag
- 7. Limiter l'accès par contrôleur ou par modèle?
- 8. Un grand DAO ou plusieurs plus petits?
- 9. Appel d'un DAO d'un autre DAO?
- 10. modèle ORM et DAO dans mon cas particulier
- 11. Filtrer jqGrid par programme sur le client?
- 12. Comment filtrer ou trouver un modèle basé sur une méthode dans ce modèle?
- 13. Comment filtrer par NDC?
- 14. NSDictionary: Comment filtrer par correspondance ou valeur la plus proche
- 15. Symfony/Doctrine - Comment filtrer champ de formulaire par la propriété dans le modèle lié
- 16. Utilisation d'un modèle comme interface pour un dao
- 17. django python Comment filtrer object_set.all par l'utilisateur actuel dans le modèle
- 18. Comment filtrer le temps de l'article Modèle dans gridview
- 19. Utilisation d'un DAO dans un autre DAO - bonne ou mauvaise pratique?
- 20. Django ORM: Filtrer par attribut supplémentaire
- 21. Comment filtrer par nombre d'associations?
- 22. collection Filtrer par attribut Set
- 23. Création d'un modèle de publication-abonnement à intégrer au modèle DAO
- 24. DDD: Tenter de trier et de filtrer le code en fonction de Poco, Repository, DTO et DAO en utilisant C#?
- 25. Spring JDBC DAO
- 26. Rails filtrer les enregistrements du modèle enfant basé sur le modèle parent attribut
- 27. Comment utiliser les DAO avec hibernate/jpa?
- 28. Webservice Java: utilisation des gestionnaires MVC ou DAO +
- 29. DAO, Spring, Hibernate, Jboss
- 30. Filtrer par critériums dans la requête LINQ
S'il vous plaît, pourriez-vous partager toute mise en œuvre de cette dao? –