Supposons que mon application WinForms possède une entité commerciale Commande, l'entité est utilisée dans plusieurs vues, chaque vue gère un domaine ou un cas d'utilisation différent dans l'application. À titre d'exemple, l'un gère les commandes, l'autre creuse dans une commande et affiche des données supplémentaires. Si j'utilise nHibernate (ou tout autre ORM) et que j'utilise une session/dataContext par vue (ou par action db), je finirais par avoir deux instances différentes pour le même Ordre (disons orderId = 1). Bien que fonctionnellement la même entité, ils sont techniquement deux instances différentes. Oui, je pourrais implémenter Equals/GetHashcode pour les faire "sembler" le même. Pourquoi opteriez-vous pour une instance unique par entité par rapport aux instances privées par vue ou par cas d'utilisation? Avoir des instances uniques a l'avantage de partager des événements INotifyPropertyChanged et de partager des données supplémentaires (non persistantes). Avoir une instance privée dans chaque vue vous donnerait la flexibilité de la fonctionnalité d'annulation au niveau de la vue. Dans l'exemple ci-dessus, je permet à l'utilisateur de modifier les détails de la commande et de lui donner la possibilité de ne pas enregistrer le changement. Ici, la synchronisation entre le view/use-case se produit sur un niveau de persistance des données.Entité commerciale: instance privée VS instance unique
Quel serait votre argument?
Intéressant ... mais pourquoi * devriez-vous implémenter equals/gethashcode? En d'autres termes, pourquoi le constructeur ORM ne retournerait-il pas simplement une seule instance d'une entité et laisserait-il gérer l'égalité?Je suppose que ce que je vise est les meilleures pratiques basées sur des scénarios où il est préférable d'aller pour des instances privées, plutôt que d'accepter simplement que c'est comme ça ... – tofi9
Parce que dans la plupart des cas, l'ORM * ne peut pas * . Disons que ** vous ** créez une instance d'un objet. Ensuite, vous persistez dans la base de données. Ensuite, vous sortez le même objet de la base de données à l'aide de l'ORM. Comment l'ORM sait-il que vous avez instancié cet objet plus tôt? Tout ce qu'il sait, c'est ce qu'il cache. Et dans de nombreux cas, les proxies sont utilisés sur les objets pour aider au suivi des propriétés qui ont changé. Vous * devriez * les implémenter parce que vous avez maintenant un moyen de comparer l'égalité des objets métier entre les objets. Est-ce que vous vous souciez vraiment s'ils sont la même instance? Si vous le faites, gardez votre propre cache. – snicker