28.1.3松散耦合
更好的做法是将应用程序逻辑与事件处理程序分开,各自负责处理各自的事情。事件处理程序应该 专注于 event 对象的相关信息,然后把这些信息传给处理应用程序逻辑的某些方法。例如,前面的例 子可以重写为如下代码:
function validateValue(value) {
value = 5 * parseInt(value);
if (value > 10) {
document.getElementById("error-msg").style.display = "block";
}
}
function handleKeyPress(event) {
if (event.keyCode == 13) {
let target = event.target;
validateValue(target.value);
}
}
这样修改之后,应用程序逻辑跟事件处理程序就分开了。handleKeyPress()函数只负责检查用户是不是按下了回车键(event.keyCode 等于 13),如果是则取得事件目标,并把目标值传给 validateValue()函数,该函数包含应用程序逻辑。
注意,validateValue()函数中不包含任何依赖事件处理程序的代码。这个函数只负责接收一个值,并根据该值执行其他所有操作。 把应用程序逻辑从事件处理程序中分离出来有很多好处。首先,这可以让我们以最少的工作量轻松地修改触发某些流程的事件。
如果原来是通过鼠标单击触发流程,而现在又想增加键盘操作来触发,那么修改起来也很简单。其次,可以在不用添加事件的情况下测试代码,这样创建单元测试或自动化应用程序流都会更简单。
以下是在解耦应用程序逻辑和业务逻辑时应该注意的几点。
- 不要把 event 对象传给其他方法,而是只传递 event 对象中必要的数据。
- 应用程序中每个可能的操作都应该无须事件处理程序就可以执行。
- 事件处理程序应该处理事件,而把后续处理交给应用程序逻辑。 做到上述几点能够给任何代码的可维护性带来巨大的提升,同时也能为将来的测试和开发提供很多 可能性。