收集项目知道收集它的集合 - 这闻到了吗?

时间:2009-10-23 12:59:04

标签: javascript software-design

好吧,这可能是一个奇怪的问题,也许我正走错方向,但这是我的问题:

我有一个SearchForm对象,它包含Tag对象的集合。当用户单击Tag对象时,它会突出显示自身并触发事件。 SearchForm类侦听此事件并提交自身。 Tag对象与SearchForm无关。

到目前为止,非常好。

现在,某些标签在点击时必须激活其他标签。每个标签都知道它必须激活的其他标签。但为了做到这一点,它必须知道搜索表所拥有的整个标签集合。

如果Tag实例(=集合项)具有对所有其他标签(=集合)的完整列表的引用,它会“糟糕”吗?

当然,这样的事情是可行的:

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

但这似乎有点尴尬,不是吗?

3 个答案:

答案 0 :(得分:4)

这听起来不像是有什么问题。如果集合中的某个项目需要了解集合中的其他项目,那么它也可以完全了解整个集合。

大多数GUI框架和可能与您合作的DOM本身都有集合项,可以了解它们所处的集合(在DOM中,在任何元素上,您可以调用parentElement来获取它的父母)。

一般来说,如果对象不“知道”超过他们需要的最小值,以减少耦合,这是很好的。但是如果一个对象确实需要了解某些东西,那么给它一个参考并不是不合理的。

答案 1 :(得分:1)

集合中的项目知道其行踪并不常见......想想链接列表或树木。如果您不希望标记知道整个列表,则可以仅添加对其相关标记的引用。

答案 2 :(得分:0)

我认为这只是一个observer design pattern

我不知道javascript,但我想它应该是可行的。

在任何情况下都要避免对列表进行硬编码。