2017-04-18 20 views
0

私はGoF を参照しています。抽象的な工場ファクトリメソッドパターン。私はその目的を理解していますが、どちらのパターンもクライアントが「ファクトリオブジェクト」のインスタンスを取得する方法についての説明は省略しています。例えば、以下抽象工場パターンで、議論は、いくつかの他のフレームワークまたはドライバコードが既に階層を構築したと仮定し、そしてApplicationインスタンスが既にGUIFactoryWinFactory又はOSXFactoryいずれか)のインスタンスを保持していること工場を工場を作るには?

(ソース:https://en.wikipedia.org/wiki/Abstract_factory_patternAbstract factory pattern

同様の議論は、ファクトリメソッドパターンの方に行きます。ディスカッションでは、外部の何かが既にMagicMazeGameをインスタンス化していると仮定しています。

(ソース:https://en.wikipedia.org/wiki/Factory_method_patternFactory method pattern

は、なぜそれが私を気にしますか?これらのオブジェクト階層を構築するために別のパターンが必要なので、そのパターンは工場と多くの人が実際に意味するものです。

(ソース:ドメイン駆動設計、2003エリック・エヴァンス)は、基本的には工場出荷時のパターンは次のようである factory pattern

これは私の意見では、どちらか抽象ファクトリーまたはファクトリメソッドは異なるパターンです。クライアントは要件を指定し、ファクトリはコンフィグレーションとコンテキストに基づいての要件に基づいてオブジェクトを作成します。仮想的な例として、クライアントは抽象的なConnectionオブジェクトを必要としていると指定し、ファクトリはシステムに構成されたデータベースドライバに応じてMySQLConnectionまたはOracleConnectionを作成します。

だから、私の質問は以下のとおりです。

  • 私が説明した最後のパターンのための用語がありますか? (私は研究を試みたが、用語工場は常にGoFの工場パターンを意味する)
  • ファクトリを作成する工場はどのように命名されるべきですか? GUIFactoryFactory ???
  • または私はこのすべてについて完全に間違っていますか?

が、私はこの質問は物事に名前を付ける方法について尋ねたが、ユビキタス言語使用されていることを知っている(ソース:ドメイン駆動設計を、エリック・エヴァンス2003年と私完全に同意する)は、ソフトウェア工学における非常に重要です私の考えでは。

答えて

2

オブジェクト階層を構築するために使用されるパターンは、Composition Rootとして知られています。このパターンは、インタフェースを実現するための具体的なオブジェクトの構築に適用されます。これには、ファクトリインタフェースを実現するための具体的なファクトリも含まれます。

Composition Rootは通常依存性注入と組み合わせて使用​​されるため、Erich Gamma mentionedはGoFブックを "リファクタリング"する方法について2009年に依頼されたときに依存性注入を追加することに注目してください。

Eric Evansの図は、という工場のという用語が、任意の工場パターンのプレースホルダーとして使用されている建築ビューのようです。つまり、抽象ファクトリ、ファクトリメソッド、またはGoF外の他のファクトリパターンを表すことができます。特定のファクトリパターンはアーキテクチャレベルで重要ではなく、クライアントがインスタンシエーションロジックを他のコンポーネントに委譲するという考えだけです。