3

オブジェクトの状態を実装する方法についてジレンマがあります。これがあるとしましょう:

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番目のアプローチですか?ここで正しい方向に進んでいますか?

ありがとう。

4

1 に答える 1

0

通常Marker Interface、この種のものには s を使用します。
これは、私たちが話しているある種の ORM だと思いますか? また、エンティティの永続性を処理する何らかのオブジェクトがあると思います。そのオブジェクトにそれをチェックさせ、それ$entity instanceof Deletableに基づいて行動させます。

于 2012-10-18T12:13:15.180 に答える