質問

Martin Fowlerのエンタープライズアプリケーションアーキテクチャのパターン、およびフロントコントローラーのパターンを検討してください。 http://martinfowler.com/eaacatalog/frontcontroller.htmlどうやら、シングルトンパターンを使用しています。まあ、私はPHPアプリケーションのクラスのパッケージを持っています(Zendのコントローラーパッケージのように)。それらがすべて使用可能なクラスが1つあり、フロントコントローラーの概念の多くに似ているため、PackageName_Frontと名付けました。しかし、それは(フロントコントローラーとは対照的に)シングルトンのクラスではないはずですので、それでもフロントという名前を置いていますか?そうでない場合、私はそれに何に名前を付けますか?それは非常に大きなパッケージなので、私はそれが可能な限り(独断的な方法ではない!)、それができる限りそれを従う必要があるので、それは他の開発者に読みやすいでしょう。

詳細:コントローラーに関連するものではありません。これは、zend_form(zend_form_element_xやzend_validateなどの他のすべてのオブジェクトの使用を1つのオブジェクトに統合する)のように機能するオブジェクトですが、packageNameという名前だけで名前を付けることはできません。それはpackageName_somathingでなければなりません、そして私はただ何かがどうあるべきかを雌犬にしていません。たぶん「ハンドラー」?...誰かがそれを読んでいるときに、パッケージ全体でその役割について混乱していないことを確認したいだけです:)

役に立ちましたか?

解決

どうやら、それ FrontController シングルトンパターンを使用します。

FrontControllerは、Singletonとして実装する必要はありません。この本はこのようなものを示唆していません。本の例は、ハンドラーにサーブレットを使用しています。

クラスがアプリケーションで一度だけ必要になるからといって、シングルトンとしての実装を正当化しません。シングルトンの目的がありません 強制 クラスには1つのインスタンスしか持てません それへのグローバルアクセスを提供します。特定のインスタンスが一度だけ必要な場合は、考慮してください 作成するだけです 代わりは。

最近の多くの人々(GOF名声のエーリッヒガンマを含む)は、シングルトンをコードの匂いと見なし、それが使用されていることを思いとどまらせています。共有のノーシングアーキテクチャでは、シングルトンはとにかく現在のリクエスト内のインスタンスのみを制限することができるため、PHPでの使用は限られています。オブジェクトへのグローバルアクセスは、(邪悪な)グローバルキーワードまたは静的メソッドのいずれかを介して、シングルトンパターンなしでは実現できます。グローバルアクセスは、常に不要なカップリングを作成します。より良い方法は、依存関係噴射を使用することです。

それで、私はまだそれが正面に名前を持っているようにしますか?そうでない場合、私はそれに何に名前を付けますか?それは非常に大きなパッケージなので、私はそれが可能な限り慣習に従うためにそれが必要です(独断的な方法ではありません!)

クラスの命名については、そのような規則はありません フロント 私の知る限りのクラス。あなたが説明するものはaになる可能性があります ファサード またはa ゲートウェイ けれど。また、パッケージネームの後にクラスに名前を付けることはできませんか?結局のところ、 Zend_Form パッケージには Zend_Form クラスも。

他のヒント

純粋にデザインのビューから、あなたが言うとき、あなたはそのpackagename_frontをファサードとして使用しているように聞こえます:

それらをすべて使用できるようにするクラスが1つあります

ファウラーのパターンの実装は次のように述べています

フロントコントローラーは、単一のハンドラーオブジェクトを介してリクエストをチャネリングすることにより、すべてのリクエスト処理を統合します

これは、シングルトンがフロントコントローラークラスを実装するために使用される可能性があることをほのめかしますが、それを使用するように制約しません。彼はそれについて明示的に言及していません。

シングルトンであるかどうかは重要ではないと思います。リクエスト用の唯一のチャネルを確認するだけで、パターンを正常に使用することができます。 :)

シングルトンパターンの背後にあるアイデアは、単一のインスタンスでのみ存在するはずのオブジェクトのインスタンスが1つしかないことを確認することです。フロントコントローラーはこのカテゴリに非常によく分類されるため、おそらく、シングルトンパターンに従うことが賢明でしょう。

ただし、コードが常に一度だけコンストラクターを呼び出すことを確認する場合、シングルトン以外のパターンオブジェクトの余地があります。

私は本の著者か何かではないので、ここで私の2セント。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top