ホームページ >バックエンド開発 >PHPチュートリアル >クラスコードを変更せずにクラスの機能を拡張しますか?

クラスコードを変更せずにクラスの機能を拡張しますか?

WBOY
WBOYオリジナル
2016-08-18 09:16:151188ブラウズ

最初の写真

クラスコードを変更せずにクラスの機能を拡張しますか?

現在のアプリケーションは を使用していますyaf框架,所有的控制器都继承Base_controller, 但由于后期功能越来越多(权限管理、产品管理、日志管理等), 导致Base_controller肥大化することはもうありません

もちろん、機能ごとに異なるクラスファイルを作成し、Base_controller中初始化也能满足需求, 但这样各个功能和Base_controllerそれらを強結合することもできるので、もっと良い解決策はないでしょうか。

今考えているのは、装饰模式,(因为目前只会这个,妈蛋),
用具体的装饰类(权限管理,日志管理)来装饰Base_controller, 使其具有这些功能, 但由于装饰模式要求被装饰者(Base_controller), 和具体装饰者都继承自同一类, 然而现在Base_controller已经继承自其它类了, 所以Base_controller飾られた役を演じることはできない

ということです。

それでは、私が一生懸命書いた機能クラス (権限管理、プロダクト管理、ログ管理) を装飾するには誰を使用すればよいでしょうか?

それでは、私は間違った方向に進んでいますか、装飾モードはここではまったく適していません、それとも他のデザインが必要ですか?

返信内容:

最初の写真

クラスコードを変更せずにクラスの機能を拡張しますか?

現在のアプリケーションは を使用しています

肥大化することはもうありませんyaf框架,所有的控制器都继承Base_controller, 但由于后期功能越来越多(权限管理、产品管理、日志管理等), 导致Base_controller

もちろん、機能ごとに異なるクラスファイルを作成し、

それらを強結合することもできるので、もっと良い解決策はないでしょうか。 Base_controller中初始化也能满足需求, 但这样各个功能和Base_controller

現在私が考えているのは、

デコレータの役割を果たすことはできないということです装饰模式,(因为目前只会这个,妈蛋),
用具体的装饰类(权限管理,日志管理)来装饰Base_controller, 使其具有这些功能, 但由于装饰模式要求被装饰者(Base_controller), 和具体装饰者都继承自同一类, 然而现在Base_controller已经继承自其它类了, 所以Base_controller

それでは、私が苦労して書いた機能クラス (権限管理、プロダクト管理、ログ管理) を装飾するには誰を使用すればよいでしょうか?

それでは、私は間違った方向に進んでいますか、装飾モードはここではまったく適していません、それとも他のデザインが必要ですか?

PHP の特性を使用する

お誘いありがとうございます。

上記の特性は確かに解決策ですが、問題の鍵はここにあるわけではない可能性があります。

装飾モードの理解は不正確ですが、それは大きな問題ではなく、重要ではありません

実際の開発では BaseController が肥大化するという問題に遭遇したことはありません。これは通常、開発者のレベル (またはレルム) の結果であり、クラス コードを変更しない場合でも、この問題は発生します。解決することはできませんが、再構築する必要があります。

通常、BaseController は、Controller によって提供されるべきではない多くのメソッドが宣言されているため肥大化しています。これらのメソッドは、おそらく Model 内で宣言されるか、Helper に属する必要があります。これが重要な問題です。モデルは共有されるため、そのメソッドはどのコントローラーでも使用できます。そして、モデルで定義すべきメソッドがコントローラーに配置され、コントローラーが公開されていない場合、現時点での最も簡単な解決策は、それをベースに配置することです。長期的な蓄積が今見ている結果です。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。