ООП Дизайн: Где поставить объект, специфичный «Сравнить» метод?

StackOverflow https://stackoverflow.com/questions/4073269

Вопрос

У меня есть некоторые экземпляры объекта измерений из серии тестовых прогонов, хранящихся в объекте тестового сбора. У меня также есть какая-то логика, которая может сравнить два экземпляра объектов результатов теста и подскажите, если они «достаточно близки».

Где должна быть размещена эта логика?

  1. На объекте как метод? Нравиться: instance.approximately_equal(other)
  2. На классе объекта как класс / статический метод? class.approximately_equal(a,b)
  3. На объекте сбора как метод? collection.approximately_equal(a,b)

Какой правильный дизайн OO для этого?

(Я спрашиваю, поскольку, поскольку хотя # 1 казалось бы правильным решением, я бы никогда не спрашиваю, если кто-то один экземпляр приблизительно_equal в другой экземпляр. Только если «некоторая группа объектов» равна друг другу. Это заставило меня думать. ..)

Спасибо

Это было полезно?

Решение

Объектно-ориентированные дизайнерские книги, которые я прочитал, предложите положить функциональность перекрестного класса в объекты поставщика услуг. Это отделяет два объекта и уменьшают сложность, но может быть сверхугольником, если ваш проект невелик.

Другие советы

Я бы использовал вариант 1 (метод экземпляра), поскольку позволяет уточнить логику сравнения в полученных классах (при необходимости).

Я нашел # 3 - наименее навязчивые и приводит к менее раздутому коду, потому что он имеет тенденцию заставить вас сделать эти методы как можно более гибкими / многоразовыми. Например, в C ++ вы потенциально просто используете перегрузку оператора для обработки его; Если у вас есть утилитный класс (или, если вы планируете расширить родной тип данных), чистый эффект такой же, просто с другой презентацией.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top