1

就是那个问题。我有一个类有一些可以完成的动作,每个动作都有自己的访问回调,它决定当前用户是否可以这样做。一些访问回调共享相同的逻辑,我不确定是否应该重复此逻辑或更好地使用一种方法作为这两个操作的访问回调。

假设我们有以下代码:

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();
}

而且当我们有很多操作并且其中一些使用相同的访问回调时,当有人更改一种方法的访问回调但更改也会影响另一种方法时,这可能会导致我们出错。

4

0 回答 0