2009-10-23 94 views
3

好吧,這可能是一個奇怪的問題,也許我是錯誤的方向,但這裏是我的問題:收集物品知道收集它是否包含 - 這是否有味道?

我有一個SearchForm對象,其中包含標記對象的集合。當用戶點擊一個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

但是,這似乎有點尷尬,或不?

+0

因此,標籤之間存在多對多的關係,是啊?任何特定的層次? – 2009-10-23 13:04:12

+0

目前,關係是單向的:標籤不包含對SearchForm的引用,但SearchForm包含對標籤的引用。 – Max 2009-10-23 13:14:42

+0

SORRY:我完全錯過了你的評論。那麼,標籤之間有一種關係,但不是數據庫中反映的那種。我知道,_that_是不好的。 ;) – Max 2009-10-23 13:15:46

回答

4

這聽起來不像是有什麼問題。如果某個集合中的某個項目需要了解該集合中的其他項目,那麼將它作爲一個整體來了解它也是完全合理的。

大多數GUI框架以及大概您正在使用的DOM本身都有收集項目,它們知道它們所在的集合(在DOM中,在任何元素上,可以調用parentElement來獲取其父項) 。

一般來說,如果對象不能「知道」超過他們需要的最小值,這是很好的,以減少耦合。但是如果一個對象確實需要知道某件事情,那麼給它一個參考並不是不合理的。

0

我認爲這只是一個observer design pattern

我不知道JavaScript,但我想它應該是可行的。

無論如何避免硬編碼您的列表。

1

集合中的某個項目知道它的位置並不罕見...認爲鏈接列表或樹木。如果您不希望標籤知道整個列表,則可以僅添加對其相關標籤的引用。