这是个问题。我有一个类可以完成一些操作,每个操作都有自己的访问回调,它决定当前用户是否可以执行。 一些访问回调共享相同的逻辑,我不确定是否应重复此逻辑或更好地使用一种方法作为这两种操作的访问回调。
假设我们有以下代码:
class Foo {
function init() {
// These two actions have different access callbacks that implement the same logic.
$this->createAction('Do something', 'doSomething', 'canDoSomething');
$this->createAction('Do something else', 'doSomethingElse', 'canDoSomethingElse');
// And these actions have one access callback.
$this->createAction('Do Bar', 'doBar', 'todayIsSaturday');
$this->createAction('Do Baz', 'doBaz', 'todayIsSaturday');
}
function createAction($name, $callback, $access_callback);
function canDoSomething() {
return 'Saturday' == date('l');
}
function canDoSomethingElse() {
return 'Saturday' == date('l');
}
function todayIsSaturday() {
return 'Saturday' == date('l');
}
}
第二种方式乍一看看起来好多了,但是当逻辑变得更复杂时,为这些重用方法选择正确的名称变得太难了。
function howToNameMe() {
return 'Saturday' == date('l') || 42 == mt_rand();
}
而且,当我们有很多操作并且其中一些使用相同的访问回调时,当有人更改一个方法的访问回调时,它可能会导致我们错误,但更改也会影响另一个方法。