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

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

Aug 18, 2016 am 09:16 AM
php デコレータ デザインパターン

最初の写真

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

現在のアプリケーションは を使用しています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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles