Коллекционный предмет знает о коллекции, в которой он содержится - пахнет ли это? - PullRequest
3 голосов
/ 23 октября 2009

Хорошо, это может быть странный вопрос, и, возможно, я движусь не в том направлении, но вот моя проблема:

У меня есть объект SearchForm, который содержит коллекцию объектов Tag. Когда пользователь щелкает объект Tag, он выделяет себя и запускает событие. Класс SearchForm прослушивает это событие и отправляет сам себя. Объект Tag не имеет отношения к SearchForm.

Пока все хорошо.

Теперь некоторые теги должны активировать другие теги при нажатии. Каждый тег знает, какие другие теги он должен активировать. Но для того, чтобы сделать это, он должен ЗНАТЬ обо всей коллекции тегов, хранящихся в поисковой форме.

Было бы "плохо", если бы экземпляр тега (= элемент коллекции) имел ссылку на полный список всех других тегов (= коллекция)?

Конечно, что-то вроде этого будет выполнимо:

Tag is clicked -> SearchForm is notified -> checks if the clicked tag must activate some others -> SearchForm activates the needed Tags itself.

Но это кажется немного неловким или нет?

Ответы [ 3 ]

4 голосов
/ 23 октября 2009

Не похоже, что с этим что-то не так. Если в коллекции есть предмет, который должен знать о других предметах в коллекции, вполне разумно знать и о коллекции в целом.

Большинство каркасов GUI и сам DOM, с которым вы, вероятно, работаете, имеют элементы коллекции, которые знают о коллекции, в которой они находятся (в DOM для любого элемента вы можете вызвать parentElement, чтобы получить его родителя ).

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

1 голос
/ 23 октября 2009

Нередко предмет в коллекции узнает его местонахождение ... подумайте о связанных списках или деревьях. Если вы не хотите, чтобы тег знал весь список, вы можете добавить ссылку только на связанные теги.

0 голосов
/ 23 октября 2009

Я думаю, что это просто шаблон проектирования наблюдателя .

Я не знаю javascript, но думаю, это должно быть выполнимо.

В любом случае избегайте жесткого кодирования вашего списка.

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