【发布时间】:2009-02-23 20:34:39
【问题描述】:
我遇到了这样一种情况,即我有多个交互小部件(在 Web UI 上),所有这些小部件都可以处于多种不同的状态,并且它们的行为取决于其他人。我遇到的情况是,例如,一组数据被排序两次,或者数据在排序之前被显示,而不是相反。这是一个有点古怪的问题,我认为我已经简化了一些事情并让它工作,只是发现我在其他地方破坏了一些东西。
我的函数可以做以下事情:
widgetAFunction
load data into widget B
tell widget B to sort the data
tell widget B to display the data
我对代码重用的热爱让我想做一些事情,比如在小部件 A 中编写一个 loadData 函数,如下所示:
widgetBLoadDataFunction
update data
sort the data
refresh the view
因此,widgetA 所要做的就是在 widgetB 上调用一个函数。但是有些情况我只想对数据进行排序,而不更新数据,所以我写:
widgetBSortFunction
sort the data
refresh the view
然后也许我想要一个过滤功能
widgetBFilterFunction 过滤数据 刷新视图
也许我想更新数据但不排序,所以我有
widgetBNoSortLoadDataFunction
update data
refresh the view
它看起来并不复杂,但我最终得到了这些非常长、非常脆弱的函数调用链,或者一堆非常相似的调用。正如 Martin Fowler 所说,代码变得有点臭了。
那么,我还有什么其他选择?我在最近的一个项目中做了一些事情,我做了一个状态机之类的事情,我注册了一堆带有一组条件的函数,或者会触发它们执行的状态。这有点效果,我认为这种方法可能会很好地再次使用。
有谁知道我在说什么,甚至更好的是,谁能指出一些有助于我更好地理解这个问题的模式?
【问题讨论】:
标签: javascript design-patterns architecture user-interface