3

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

我有一个 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.

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

4

3 回答 3

4

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

大多数 GUI 框架,以及您可能正在使用的 DOM 本身,都有知道它们所在集合的集合项(在 DOM 中,在任何元素上,您可以调用parentElement以获取其父项)。

一般来说,如果对象不“知道”超过它们所需的最小值,这是很好的,以减少耦合。但是如果一个对象确实需要知道某事,那么给它一个引用并不是不合理的。

于 2009-10-23T13:11:42.457 回答
1

集合中的项目知道其下落的情况并不少见……想想链表或树。如果您不希望标签知道整个列表,您可以只添加对其相关标签的引用。

于 2009-10-23T13:12:46.637 回答
0

我认为这只是一种观察者设计模式

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

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

于 2009-10-23T13:11:07.170 回答