2010-07-25 7 views
3

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

3

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); 
} 
+0

S'il vous plaît, pourriez-vous partager toute mise en œuvre de cette dao? –

1

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.

Questions connexes