Question

Ma question est quand utiliser un modèle de cahier des charges, et quand utiliser requête SQL spécifique.

Je compris que modèle spécifique besoin de collecter la collecte et l'ensemble post-filtre en utilisant la spécification du béton. Mais je Dont't comprendre l'avantage en face de requête SQL spécifique.

CarColorSpecification cc = new CarColorSpecification(RED);
CarAgeSpecification ca = new CarAgeSpecification(OLDER, 5);

ISpecification finalSpec = cc.And(ca);

List<Car> res;
List<Car> carColl = service.getCars();
foreach(Car c in carColl) {
  if(finalSpec.isSatisfiedBy(c)) {
    res.add(c);
  }
}

Et même dans SQL / Mise en veille prolongée

FROM Car c WHERE c.color = RED AND c.age > 5

Je pense que cela dépend du volume de données à traiter.

Était-ce utile?

La solution

Référentiel est utilisé pour la mise en œuvre abstraite de persistance loin de vos classes de domaine. En bref, ne doit SQL / HQL exister dans vos référentiels.

Si vous avez affaire à des volumes élevés de données, créez une nouvelle méthode sur votre Référentiel et appeler cette méthode à partir de votre Spécifications .

Autres conseils

La version SQL fonctionnera rapidement à condition que la table est indexée de façon appropriée pour les colonnes en question et sa taille, et il va transférer un plus petit volume de données entre le serveur DB et le serveur d'applications si elles sont différentes. Il peut toutefois imposer une charge plus élevée sur la boîte SQL en termes de CPU et de l'utilisation d'E / S disque, et dans de nombreux environnements, le serveur de base de données est le composant le plus cher à l'échelle.

Alors oui, cela dépend beaucoup de la taille des données.

Je pense qu'un bon compromis serait de combiner modèle de spécification selon mise en veille prolongée pour générer des requêtes HQL. (Peut-être Linq pour Java ^^?)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top