Lors du développement de mon modèle de données, je n'ai pas prêté attention au niveau de base de données sous-jacent. J'ai encapsulé de la logique dans les propriétés de mes classes de domaines (exemple: méthode qui compte le profit de l'ordre). Tout fonctionne bien jusqu'à ce que j'ai besoin de trier les données. Le tri est une fonctionnalité purement basée sur la base de données (principalement en raison des performances que je ne peux pas récupérer toutes les lignes de la table et les trier au niveau de mon domaine).
Il s'avère que je dois répéter la logique, précédemment encapsulée dans mon niveau de domaine au niveau de la base de données (non seulement répéter, mais traduisez-le en langage de base de données).
Cela semble très mauvais et je ne veux pas le faire.
Y at-il un moyen de contourner un tel problème?Tri des données lors d'un développement piloté par domaine
Modifier
exemple de ce que je suis en train de faire:
mon domaine:
class Order {
var lines;
profit() {
return lines.sum(line => line.sellPrice * line.quantity) -
lines.takeAllOutcomesAndSum(outcome => outcome.buyPrice * outcome.quantity)
}
}
class Line {
var outcomes;
var sellPrice
}
class Outcome {
var buyPrice;
var quantity;
}
le problème est quand je veux trier les commandes par le profit, il se trouve à plusieurs jointures et calculs en code sql (qui répète la logique déjà écrite dans la méthode Order.profit()).
Je suis venu en fait idée de stocker des valeurs calculées dans la base de données au lieu de les calculer
vous avez besoin de trier des valeurs différentes? un exemple de simulation de ce que vous faites? – fabrizioM
J'ai ajouté un exemple à mon article – kilonet
Pourquoi ne pas implémenter un calque qui a l'implémentation? Je veux dire, vous pouvez utiliser l'injection de dépendance pour séparer la logique du domaine. – VitorCioletti