Какой анти / паттерн предполагает многократное прохождение по одним и тем же параметрам? - PullRequest
0 голосов
/ 23 марта 2012

Итак, скажем, у меня есть код ...

House = function () { /* constructor */ }

House.childPlay  (childId) { ... }
House.childLearn (childId) { ... }
House.childEat   (childId) { ... }

Итак, неявно, у этого объекта Дома "есть" дочерние элементы, но у него не обязательно есть дочерние объекты, пока. Это то, что мне интересно. Этот постоянный переход вокруг childId кажется подозрительным. Должен ли Хаус просто иметь коллекцию дочерних объектов?

House.Child.play  () { ... }
House.Child.learn () { ... }
House.Child.eat   () { ... }

Меня беспокоит только то, что некоторые операции находятся между Домом и Ребенком, как будто они взаимодействуют. Таким образом, объекту Child понадобится какая-то осведомленность о родительском объекте.

House.Child.clean () {
    self._cleaningStrategy( self.house._provideMop() );
}

Я вижу, что есть шаблон проектирования, называемый объектом параметров. Это то? Я думаю, что было бы, если бы я передавал параметры набора кортежей, но здесь я только обгоняю один.

1 Ответ

1 голос
/ 26 марта 2012

Звучит так, будто поведение ребенка не зависит от дома (и так должно быть). Если мы хотим, чтобы ребенок ел, это не имеет ничего общего с домом, так что это будет путь:

Child.Eat();

Если мы хотим, чтобы ребенок убрал дом, звучит так, как будто мы должны сделать это:

Child.CleanHouse(house);

Таким образом, ребенок также может убирать в другом доме; не только один дом.

CleanHouse () может выглядеть так:

Mop mop = house.GetMop();
// Perform cleaning activities here.

Я согласен с вашей озабоченностью поведением ребенка на домашнем объекте. Это нарушает принцип единой ответственности ООП (дом должен заниматься только домашними делами) и идею дизайна Information Expert (класс, который имеет информацию, необходимую для выполнения ответственности). Дом должен содержать поведение, характерное для дома, а Ребенок должен содержать поведение, специфичное для ребенка, иначе они слишком тесно связаны.

Я не знаю, что это проблема шаблона проектирования, а проблема ООП.

...