オブジェクトの状態を実装する方法についてジレンマがあります。これがあるとしましょう:
class User {
private $_active;// 1 or 0
private $_deleted;// 1 or 0
...
}
これらのプロパティは、私が見たように、User オブジェクトの状態を暗示しています。私がしたいのは、afterActivate() や afterDelete() などのイベントを定義して、ルーチンを連鎖できるようにすることです。つまり、アクティベーション後にいくつかのカウンターを更新し、削除後にいくつかのカウンターも更新します...
そのため、現時点では 2 つのアプローチを検討しています。1 つ目は、クラス Activable および Deletable を作成し (命名は気にしないでください)、継承の階層を介して User にこれらのクラスを継承させることです。
class Activable {
protected afterActivate(){};
}
class Deletable {
protected afterDelete(){};
}
class Activable extends Deletable {}
class User extends Activable{}
このアプローチには 2 つの問題があります。1 つ目は、クラス Activable が Deletable 状態を暗示していることです。これは間違っています。2 つ目の問題は、状態が増えると、継承階層が非常に複雑になる可能性があることです。(ユーザーは、何か他のものを拡張するモデルクラスを拡張するため...)
2 番目のアプローチは、PHP で特性を使用し、それらを使用してこれを実現することです。だから私は次のようなものを持っているでしょう
class User{
use Activable, Deletable;
}
どのアプローチがより良いでしょうか-おそらく3番目のアプローチですか?ここで正しい方向に進んでいますか?
ありがとう。