この質問では、現在のデザインと特性を使用するアイデアを示したいと思います。私は、形質の正しい理解と、それを伴わない別のデザインで私の問題を解決できるかどうかを知りたい。したがって、私はいくつかを追加することができますPHPの特性を使用して複数の継承をシミュレートする
abstract class AbstractBasePage extends AbstractPage { /* ... */ }
:私は以下の持っているために使用されるフレームワークに基づいている私のアプリケーションでは
interface IPage { /* ... */ }
interface IForm extends IPage { /* ... */ }
abstract class AbstractPage implements IPage { /* ... */ }
abstract class AbstractForm extends AbstractPage implements IForm { /* ... */ }
:
は私の枠組みの中で私の現在のクラス階層は次のようになりますフレームワークや他のアプリケーションに共通ではない、この特定のアプリケーションのためのすべてのページへのより多くのもの。これは、最初のスニペットに示されているように、ページとフォームに分離するまではうまくいきました。今、私はこのようなものになってしまった:
abstract class AbstractBasePage extends AbstractPage { /* ... */ }
abstract class AbstractBaseForm extends AbstractForm { /* ... */ }
のは、何か特別なものがテンプレートで表示されているかどうかを示し、各ページのための変数とフォームがあるべき一つのアプリケーションで仮定しましょう。 AbstractBasePage
とAbstractBaseForm
に同じ変数を導入する必要があります。そうすることで、両方のスニペットを同期させるように強制されますが、これはまったくうまくいきません。
私は変数と関数を両方のクラスに公開する特性をつくることを考えていました。これらの変数は、対応する関数で参照できます。このような特性を使用すると、コードの重複を少なくとも減らすことができます。なぜなら、両方のクラスから呼び出される公にアクセス可能なメソッドを導入することができますが、それ以外には適切な抽象化があるからです。
これはどのような特性が役立つと思われますか?より適切なアプローチがありますか?