Question

J'ai quelques instances d'objet de mesure d'une série d'essais de test stockées dans un objet de collection de test. J'ai aussi une certaine logique qui peut se comparer deux instances d'objet de résultat de test et me dire si elles sont « assez proche ».

Si cette logique doit être placé?

  1. Sur l'objet comme méthode? Comme: instance.approximately_equal(other)
  2. Sur la classe de l'objet en tant que classe / méthode statique? class.approximately_equal(a,b)
  3. Sur l'objet de collection comme méthode? collection.approximately_equal(a,b)

Quelle est la conception OO correcte pour cela?

(je demande, car, bien que # 1 Il semblerait que la bonne solution, je ne serais jamais demande si quelqu'un est par exemple approximately_equal à une autre instance. Seulement si « certains groupes d'objets » sont égaux les uns aux autres. Il a moi la pensée ...)

Merci

Était-ce utile?

La solution

L'objet des livres de conception orientée j'ai lu suggèrent de mettre la fonctionnalité de classe cross en objets de fournisseurs de services. Cela découpler les deux objets et de réduire la complexité, mais peut-être exagéré si votre projet est faible.

Autres conseils

J'utiliserait l'option 1 (méthode d'instance) depuis que vous permet d'affiner la logique de comparaison dans les classes dérivées (le cas échéant).

Je l'ai trouvé # 3 est le moins importun et conduit à moins de code pléthorique, car elle tend à vous forcer à faire ces méthodes aussi flexibles / réutilisables possible. Par exemple, en C ++, vous auriez éventuellement utiliser simplement la surcharge opérateur pour manipuler; si vous avez une classe utilitaire (ou, si vous prévoyez de l'extension d'un type de données natif), l'effet net est le même, juste avec une présentation différente.

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