В составном объекте являются ли почти идентичные функции родительских и дочерних объектов общими? - PullRequest
1 голос
/ 29 июля 2011

Скажем, у меня есть объект Timer, у которого в качестве одного из свойств используется объект TimerDisplay.Если у меня есть метод обновления (часы, минуты, секунды) в объекте TimerDisplay, какой из следующих (если таковые имеются) являются хорошей практикой:

  • имеет updateDisplay (часы, минуты, секунды)Метод в Timer, который вызывает соответствующий метод обновления в TimerDisplay
  • , разрешает прямой вызов timer.timerDisplay.update (часы, минуты, секунды)

Я простоначиная ОО, кстати.Первый, кажется, больше ОО, но заканчивается двумя почти идентичными методами.Второе кажется проще, но разве не происходит повторная инкапсуляция?

Заранее спасибо

1 Ответ

0 голосов
/ 29 июля 2011

Прямой доступ к timer.timerDisplay звучит как плохая идея (поскольку открытые атрибуты большую часть времени). Если вы не хотите, чтобы класс timer занимался связью с timerDisplay, то почему timerDisplay является свойством таймера? Просто пусть тот же парень, который обновляет таймер, сам владеет дисплеем.

С другой стороны, если вы хотите, чтобы класс Timer управлял обновлением дисплея, то ограничение его управлением только одним дисплеем звучит не очень хорошо. Почему бы не сохранить список дисплеев для уведомления вместо этого? Если вы решите, чтобы таймер осуществлял такую ​​связь, то лучше всего скрывать его за методом Timer.update.

Кроме того, если вам не нравится, когда TimerDisplay имеет методы, слишком похожие на таймер, возможно, вы можете использовать более простой метод, такой как

TimerDisplay.updateFrom(timer)

используя timer.getHours () и т. Д. Вместо передачи тонны параметров каждый раз.


Наконец, в зависимости от того, насколько сложна ваша проблема, вам может быть не просто объединить оба класса в один класс. Он менее модульный, но простота также имеет свои достоинства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...