探测到错误时禁用组件是一回事。处理出错的组件并将其从UI中优雅地移除是另一回事。即使我们努力保持组件之间松耦合,但涉及到DOM时,这项工作会变得很有难度。例如,我们是否真的可以在不影响周边元素的情况下移除出错组件的DOM元素呢,或者这样做是否会更好——将元素保留在原处,只是将它们隐藏并禁用所有的JavaScript处理函数?
我们采取的实现方式取决于我们在构建什么,即应用的本质。有的应用采用合理的方式组合组件和布局页面,使得添加和移除功能甚为方便。不要以为视觉设计只是一块可以从系统中随意拆除的皮肤,不会带来任何后果。理论上说,它应该独立于系统的其他部分,但实际上,这种思想是不可行的。页面元素的布局对扩展是有影响的,例如,当组件出错时,我们是否能够在不影响系统其他部分的情况下,将他们禁用或修复。
我们可将处理出错组件的过程比喻成关机,因为这通常涉及一系列的操作——以便优雅降级。功能很少整体失效,通常是某个组件失效,导致功能不正常。例如,路由器出错并导致某个功能失效。此时,除了关闭失效的路由处理器,我们还需要关闭该功能涉及的一系列其他组件,将它们从UI中移除,并提示错误信息。我们应为任何功能考虑和测试这种关机流程。我们要保护的不是功能本身,而是移除功能后系统的剩余部分。