それが問題です。実行できるいくつかのアクションを持つクラスがあり、各アクションには、現在のユーザーが実行できるかどうかを決定する独自のアクセス コールバックがあります。一部のアクセス コールバックは同じロジックを共有していますが、このロジックを繰り返す必要があるのか、それとも 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');
}
}
2 番目の方法は一見するとはるかに優れているように見えますが、ロジックが複雑になると、これらの再利用されたメソッドに適切な名前を付けるのが難しくなります。
function howToNameMe() {
return 'Saturday' == date('l') || 42 == mt_rand();
}
また、多くのアクションがあり、それらのいくつかが同じアクセス コールバックを使用している場合、誰かが 1 つのメソッドのアクセス コールバックを変更しても、その変更が別のメソッドにも影響を与えるというミスにつながる可能性があります。