Comment lier un objet de domaine en mémoire à ses enregistrements de base de données sans encaisser le domaine avec des préoccupations de base de données?

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/146765

  •  04-11-2019
  •  | 
  •  

Question

Votre modèle de domaine contient un ensemble d'objets. Je présente ici un projet parallèle, mais j'ai un projet de travail beaucoup plus compliqué qui tombe à genoux parce que je n'ai pas fait une bonne séparation de la base de données et du domaine.

Dans ce cas, l'objet est appelé cyclingRecord.

Suivant Architecture d'oignon, les objets de domaine ne savent rien de leur persistance. Cependant, chacun de ces objets correspond à une entrée dans un montant de données (potentiellement une base de données, potentiellement un fichier). L'ID de ligne ne fait absolument pas partie de l'objet de domaine et n'a donc aucune entreprise stockée dans l'objet de domaine.

data CyclingRecord = CyclingRecord { date :: Day,
                                     distance :: Float,
                                     time :: Integer,
                                     description :: Maybe String }

Dans une langue qui applique une forte immuabilité (comme Haskell et Clojure), l'identité et la valeur sont synonymes. De plus, il n'y a aucune raison pour que vous ne puissiez pas enregistrer plus d'un seul trajet en une journée. Ainsi, l'ensemble du disque décrit complètement un trajet.

Donc, si je modifie un enregistrement dans le domaine, lorsque je renvoie les objets modifiés à l'infrastructure de base de données, comment puis-je notifier la base de données qu'elle doit mettre à jour un enregistrement particulier au lieu de supprimer un enregistrement existant?

(La même idée devrait être extensible afin que je puisse avoir une application potentiellement manipuler de nombreux enregistrements à la fois, puis les renvoyer tous à la base de données. Fonctionnement hors ligne ou synchronisation ou simplement éviter une activité de disque excessive)

À moins que la bonne réponse ne soit de faire quelque chose comme un identifiant unique pour chaque trajet. Peut-être un uuid. Peut-être ajouter un "compteur de jour" au disque. Faites-le intrinsèquement une partie d'une balade à vélo, puis demandez à la base de données en dépendre au lieu d'un ID de ligne séparé.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top