1

Martin Fowler の Patterns Of Enterprise Application Architecture と Front Controller のパターンを考えてみましょう: http://martinfowler.com/eaaCatalog/frontController.html どうやらシングルトン パターンを使用しているようです。さて、私は連携して動作する PHP アプリケーションのクラスのパッケージ (Zend のコントローラー パッケージなど) を持っており、それらをすべて使用可能にする 1 つのクラスがあり、フロント コントローラーの概念の多くに似ているため、PackageName_Front という名前を付けました。しかし、(Front Controller とは対照的に) シングルトン クラスであってはなりません。そうでない場合、私はそれを何と名付けますか?これは非常に大きなパッケージであるため、他の開発者が読みやすいように (独断的な方法ではなく) 可能な限り慣習に従う必要があります。

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

4

3 に答える 3

1

純粋にデザインの観点からすると、次のように言うと、その PackageName_Front を Facade として使用しているように聞こえます。

それらをすべて使用可能にする1つのクラスがあります

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

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

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

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

于 2010-10-03T19:34:59.817 に答える
1

どうやら、[FrontController]は singleton パターンを使用しています。

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

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

最近の多くの人々 (GoF で有名な Erich Gamma を含む) は、Singleton をコードの臭いと見なし、使用を思いとどまらせています。何も共有しないアーキテクチャでは、Singleton は現在のリクエスト内のインスタンスしか制限できないため、PHP での使用は制限されます。オブジェクトへのグローバル アクセスは、(evil) グローバル キーワードまたは静的メソッドのいずれかを使用して、Singleton パターンなしで実現できます。グローバル アクセスは常に不要なカップリングを作成します。より良い方法は、依存性注入を使用することです。これには、結合が少なくなり、保守性が向上するという追加の利点があります。

だから私はまだそれをFrontという名前にしますか?そうでない場合、私はそれを何と名付けますか?これは非常に大きなパッケージなので、可能な限り慣例に従う必要があるだけです (独断的な方法ではありません!)。

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

于 2010-10-03T21:11:18.623 に答える
0

シングルトン パターンの背後にある考え方は、単一のインスタンスにのみ存在するはずのオブジェクトのインスタンスが 1 つだけであることを確認することです。フロント コントローラーはこのカテゴリに非常に適しているため、シングルトン パターンに従うのが賢明でしょう。

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

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

于 2010-10-03T19:17:12.843 に答える