违反 Dry 原则的例外
Exceptions to violate Dry principle
我正在修复与丢失的鼠标事件相关的错误,有两种方法可以修复它。其中一个看起来效率很高,需要更改一行代码(我知道代码少与效率无关)。另一个在代码可读性和文档方面看起来更好,但它违反了 DRY 原则。
这是我的 javascript 代码:
function() {
//some code here was removed
events: {
'tap tbody.classX': 'triggerTap'
}
}
triggerTap: function(e) {
console.log('do your job');
}
首先建议通过添加触发相同方法的鼠标事件侦听器进行修复,即点击事件触发。
function() {
events: {
'tap tbody.classX': 'triggerTap',
'click tbody.classX': 'triggerTap'
}
}
第二个建议的修复方法是添加另一种方法 (triggerMouseClick
),该方法与 triggerTap
完全相同
function() {
events: {
'tap tbody.classX': 'triggerTap',
'click tbody.classX': 'triggerMouseClick'
}
}
//triggerTap method
triggerTap: function(e) {
console.log('do your job');
}
//trigger mouse click
triggerMouseClick: function(e) {
console.log('do your job');
}
添加另一个功能相同的功能毫无意义。那就是代码重复。
另一方面,在鼠标单击时调用名为 triggerTap
的函数也不可读。
这里正确的做法是将 triggerTap
重命名为一个有意义的名称,对两者都有意义的名称,例如 triggerTapAndClick
或更好的名称,指的是点击和鼠标单击的操作做。例如:
function() {
events: {
'tap tbody.classX': 'openContactsList',
'click tbody.classX': 'openContactsList'
}
}
openContactsList: function(e) {
console.log('do your job');
}
我正在修复与丢失的鼠标事件相关的错误,有两种方法可以修复它。其中一个看起来效率很高,需要更改一行代码(我知道代码少与效率无关)。另一个在代码可读性和文档方面看起来更好,但它违反了 DRY 原则。
这是我的 javascript 代码:
function() {
//some code here was removed
events: {
'tap tbody.classX': 'triggerTap'
}
}
triggerTap: function(e) {
console.log('do your job');
}
首先建议通过添加触发相同方法的鼠标事件侦听器进行修复,即点击事件触发。
function() {
events: {
'tap tbody.classX': 'triggerTap',
'click tbody.classX': 'triggerTap'
}
}
第二个建议的修复方法是添加另一种方法 (triggerMouseClick
),该方法与 triggerTap
function() {
events: {
'tap tbody.classX': 'triggerTap',
'click tbody.classX': 'triggerMouseClick'
}
}
//triggerTap method
triggerTap: function(e) {
console.log('do your job');
}
//trigger mouse click
triggerMouseClick: function(e) {
console.log('do your job');
}
添加另一个功能相同的功能毫无意义。那就是代码重复。
另一方面,在鼠标单击时调用名为 triggerTap
的函数也不可读。
这里正确的做法是将 triggerTap
重命名为一个有意义的名称,对两者都有意义的名称,例如 triggerTapAndClick
或更好的名称,指的是点击和鼠标单击的操作做。例如:
function() {
events: {
'tap tbody.classX': 'openContactsList',
'click tbody.classX': 'openContactsList'
}
}
openContactsList: function(e) {
console.log('do your job');
}