6

PHPでのフロントコントローラーの実装について「概念的な」質問があります。

私が見たフロント コントローラーのほとんどはシングルトンで実装されています。私はシングルトン パターンの大ファンではなく、フロント コントローラーの unic インスタンスを格納する静的プロパティを持つコンテナーを作成しました。

シングルトンでは、コンストラクター (またはコンストラクターによって呼び出されるメソッド) 内に初期化コードを配置する必要がありました。

$fc = FrontController::getInstance();

コンテナーを使用すると、FrontController の外部に構成を配置できます。それが私の目標であり、FrontController を取得する簡単な方法がまだあります。

$fc = Container->getFrontController();

このコードは私にはずっときれいに見え、親コンストラクターを気にせずにきれいなサブクラス化を行うことができます。

これは「ブートストラップ」時にまったく同じことですが、実際には、以前の実装との違いは、コンストラクターが非公開/保護されなくなったため、アプリケーション内の任意の場所 (DAO 内またはアクション内) に FrontController を作成できるようになったことです。 .

私の質問は次のとおり です。私のクラスのユーザーに、アプリ内のどこにでも FrontController インスタンスを作成する可能性を与えるのは「悪い習慣」ですか? ドキュメンテーションを書いてコンテナを他のクラスと一緒に配布するのですが、変な使い方は防がなくてはいけないのでしょうか。

4

2 に答える 2

2
$fc = Container::getFrontController();

私にはOKに聞こえます。

開発者が Front Controller インスタンスをどこからでも取得できるようにすることは、開発者が Front Controller インスタンスを使用して実行できることを正しく制御する場合 (たとえば、一部のプロパティを上書きしたり、プロパティを表示せずに間違った順序で実行したりしないでください) するのであれば、悪い習慣ではないと思いますエラー/ユーザーへの警告)。

于 2011-04-09T15:06:34.510 に答える
2

アプリ内で FrontController インスタンスを作成する本当の理由はありますか? ある場合は、次に進みます。そうしないと、後で事態が複雑になる可能性があるため、これについては少し懐疑的です。私が恐れているのは、誰かが新しい FrontController インスタンスを使用することです。それは、怠惰から、またはそれ以上のことを知らないために、はるかに簡単な方法がある場合です。うまくいくものを見つけたら、もっと良い方法があってもそれをやり続ける人もいます。あなたほど良くない人々と仕事をしなければならないかもしれないことを決して忘れないでください.

個人的に私はこれを隠すか、完全に許可しません。ただし、以降のリリースではそれを念頭に置いておきます。それが最善の選択肢である場合に遭遇した場合は、必ずそれを「公式」インターフェースに追加してください。

関数を一度公開すると、それを完全に削除するのは非常に困難であることを忘れないでください。

于 2011-04-09T15:22:07.820 に答える