問題タブ [abstract-factory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
castle-windsor - キャッスルウィンザータイプの工場施設に相当するもの
他の.NETIoCコンテナは、Castle Windsorの型付きファクトリファシリティと同等の機能を提供しますか?
たとえば、WPFアプリケーションで抽象ファクトリパターンを使用している場合:
表示したいすべてのタイプのViewModelに対してIAnotherViewModelFactoryの手動実装を作成する必要はありません。コンテナーに、これを処理してもらいたいのです。
design-patterns - デザインパターン:抽象ファクトリとファクトリメソッド
注:質問は投稿の最後にあります。
抽象ファクトリとファクトリメソッドに関する他のスタックオーバーフロースレッドを読みました。それぞれのパターンの意図を理解しています。しかし、その定義ははっきりしていません。
ファクトリメソッドは、オブジェクトを作成するためのインターフェイスを定義しますが、サブクラスがインスタンス化するインターフェイスを決定できるようにします。ファクトリメソッドを使用すると、クラスはインスタンス化をサブクラスに延期できます。
対照的に、Abstract Factoryは、具体的なクラスを指定せずに、関連オブジェクトまたは依存オブジェクトのファミリーを作成するためのインターフェースを提供します。
抽象ファクトリはファクトリメソッドと非常によく似ています。私の主張を説明するために、いくつかのUMLクラスを作成しました。
ノート:
- この図はwww.yuml.comからのものであるため、完全に方向付けられているわけではありません。しかし、それは無料のサービスです:)。
- ダイアグラムは完全ではない可能性があります。私はまだGoFデザインパターンを学んでいます。
ファクトリメソッド:
抽象ファクトリ(メンバーは1つのみ):
抽象ファクトリ(より多くのメンバー):
質問:
- Abstract Factoryにクリエーターと製品が1つしかない場合でも、Abstract Factoryパターンですか?(家族を作成するためのインターフェース)
- ファクトリメソッドの具象作成者はインターフェイスから作成できますか、それともクラスから作成する必要がありますか?(クラスはインスタンス化をサブクラスに延期します)
- 抽象ファクトリが1つの作成者と1つの製品しか持てない場合、抽象ファクトリとファクトリメソッドの唯一の違いは、前者の作成者がインターフェイスであり、後者の作成者がクラスであるということですか?
dependency-injection - Ninject、MVC 3、およびServiceLocatorパターンを使用した依存性注入
別のstackoverflowの質問(正確な質問は今はわかりません)の回答を読んで以来、私を悩ませてきた何かが、ユーザーが「Service Locatorを呼び出している場合、それは間違っています」のように言っています。
評判の高い人(10万人くらいだと思います)だったので、この人は何を話しているのか知っているのではないかと思いがちです。私は最初にDIについて学び始めてから、プロジェクトにDIを使用してきました。また、DIがユニットテストとどの程度関連しているかなどを学び始めました。それは私が今かなり快適なことであり、私は自分が何をしているのかを知っていると思います。
ただし、プロジェクトの依存関係を解決するためにServiceLocatorを使用している場所はたくさんあります。かつての代表的な例は、私のModelBinder実装からのものです。
典型的なモデルバインダーの例。
実際の実装ではありません-簡単な例です
ModelBinder実装では、バインダーが最初に要求されたときに新しいインスタンスが必要になるため、この特定の実装のコンストラクターで依存性注入を使用することはできません。
私の多くのクラスではこのようになっています。もう1つの例は、Webサイトでキャッシュオブジェクトの有効期限が切れるたびにメソッドを実行するキャッシュ有効期限プロセスの例です。私はたくさんのデータベース呼び出しを実行しますが、そうではありません。そこでも、必要な依存関係を取得するためにServiceLocatorを使用しています。
私が最近抱えていたもう1つの問題(ここに質問を投稿しました)は、すべてのコントローラーにDIを使用するIDataContextのインスタンスが必要でしたが、1つのアクションメソッドにはIDataContextの別のインスタンスが必要でした。幸いなことに、Ninjectは名前付きの依存関係で救助に来ました。しかし、これは恨みのように感じられ、実際の解決策ではありませんでした。
少なくとも、関心の分離の概念はかなりよく理解していると思いましたが、依存性注入とサービスロケーターパターンの理解方法に根本的な問題があるようです。それが何であるかはわかりません。
私が現在理解している方法(これも間違っている可能性があります)は、少なくともMVCでは、ControllerFactoryがコントローラーのコンストラクターを探し、Service Locator自体を呼び出して必要な依存関係を取得し、それらを渡すことです。ただし、 、すべてのクラスと、それらを作成するためのファクトリがないものは理解できます。したがって、いくつかのServiceLocatorパターンは許容できるように思えます...しかし...
- いつ受け入れられないのですか?
- Service Locator Patternの使用方法を再考する必要がある場合は、どのようなパターンに注意する必要がありますか?
- ModelBinderの実装は間違っていますか?もしそうなら、私はそれを修正するために何を学ぶ必要がありますか?
- この1人のユーザーの方針に沿った別の質問で、MarkSeemannはAbstractFactoryを推奨しました-これはどのように関連していますか?
それだけだと思います。理解に役立つ他の質問は思いつきませんが、追加情報をいただければ幸いです。
DIがすべての答えではない可能性があることを理解しており、DIの実装方法をやりすぎている可能性がありますが、単体テストなどで期待どおりに機能しているようです。
実装例を修正するためのコードを探しているのではありません。欠陥のある理解を修正するための説明を探して、学びたいと思っています。
stackoverflow.comにドラフトの質問を保存する機能があればいいのにと思います。また、私はたくさんのことを求めていると思うので、この質問に答える人は誰でも、この質問に答えるのに適切な評判を得られることを願っています。前もって感謝します。
design-patterns - 戦略設計パターンと抽象ファクトリパターンの違いは何ですか?
誰かが私にこれら2つの違いを説明し、それぞれをいつ使用するかについてのある種のガイドラインを与えようとすることができますか?例は本当にいいでしょう。
design-patterns - 抽象ファクトリとファクトリ メソッドを一緒に使用できますか?
この質問を却下する前に、私は実際にこれを実際的な質問として尋ねており、会話を刺激するためではありません. これが私のシナリオです
私は多くの場合、Abstract Factory は Factory Method よりも一歩進んだ実装であると読んでおり、多くの状況でこれが正しい理由を理解できます。私はこれら 2 つの違いについてもかなりよく理解していますが、最近、これら 2 つを一緒に使用するように指示されたシナリオに遭遇しました。
これを行う方法は頭を悩ませてきましたが、それが良い習慣として推奨されるかどうかはまだわかりません.
これらのパターンの両方を適用して共存させることが実際的である例を教えていただけますか? そうでない場合、それは悪い習慣ですか?
これらのパターンの辞書定義を提供するサイトに誘導しないでください。私はそれぞれのパターンをよく知っており、毎日使用していますが、両方が必要な状況に遭遇したことはありません。ありがとうございます。
design-patterns - Service Locator パターンは Abstract Factory パターンと何か違いはありますか?
一見すると、Service Locator パターンは Abstract Factory パターンと同じように見えます。どちらも同じ用途のようで (抽象サービスのインスタンスを受け取るためにクエリを実行します)、どちらも Dependency Injection について読んだときに言及されました。
ただし、Service Locator パターンが不適切なアイデアとして説明されているのを見たことがありますが、少なくとも 1 つの主要な Dependency Injection フレームワークで Abstract Factory パターンが直接サポートされているのを見てきました。
それらが同じでない場合、違いは何ですか?
design-patterns - 静的メソッドで実装されたファクトリ
静的メソッドを使用したFactoryの実装を見てきました。このようなもの:
それをAbstractFactoryと呼べるかどうかはわかりませんが、それは問題ではありません。Abstract Factoryについて私が理解しているのは、製品ファミリを簡単に変更できる柔軟性があるということです。
MyFactory
そして、からに変更したい場合は、変更するのYourFactory
に必要な行は1行だけです。実行時に変更することもできます。しかし、それらが静的メソッドとして実装されている場合は可能ですか?静的ファクトリへのすべての呼び出しを変更する必要があります。また、実行時に決定する場合は、すべての場所でif-elseチェックを使用する必要があります。
では、静的メソッドを使用してファクトリを実装することの利点は何ですか?主な柔軟性を失っていませんか?私はここで何を逃しましたか?
特定の言語は想定されていないことに注意してください。どんな助けでも大歓迎です。
factory-pattern - Abstract FactoryとFactoryデザインパターンの違いは何ですか?
これら2つのパターンの違いについて多くの投稿があることは知っていますが、見つけられないことがいくつかあります。
私が読んでいることから、ファクトリメソッドパターンを使用すると、単一の具体的な製品を作成する方法を定義できますが、一般的な製品が表示されるため、クライアントから実装を隠すことができます。私の最初の質問は、抽象ファクトリについてです。単一のコンクリートオブジェクトではなく、(使用する特定のファクトリに応じて)コンクリートオブジェクトのファミリを作成できるようにする役割はありますか?抽象ファクトリは、呼び出すメソッドに応じて、1つの非常に大きなオブジェクトまたは多数のオブジェクトのみを返しますか?
私の最後の2つの質問は、私が多くの場所で見たことを完全には理解できない単一の引用についてです。
2つの違いの1つは、抽象ファクトリパターンでは、クラスがオブジェクトのインスタンス化の責任をコンポジションを介して別のオブジェクトに委任するのに対し、ファクトリメソッドパターンは継承を使用し、サブクラスに依存して目的のオブジェクトのインスタンス化を処理することです。
私の理解では、ファクトリメソッドパターンには、どのConcreteProductをインスタンス化するかをConcreteCreatorが認識できるようにするCreatorインターフェイスがあります。これは、継承を使用してオブジェクトのインスタンス化を処理することの意味ですか?
さて、その引用に関して、Abstract Factoryパターンは、オブジェクトのインスタンス化の責任をコンポジションを介して別のオブジェクトにどの程度正確に委任しますか?これは何を意味するのでしょうか?Abstract Factoryパターンも、私の目には継承を使用して構築プロセスを実行しているように見えますが、それでも私はこれらのパターンについてまだ学習しています。
特に最後の質問で助けていただければ幸いです。
c# - Unityで抽象ファクトリをインジェクションファクトリとして使用していますか?
一部のコントローラー インスタンスでの注入用に登録された抽象ファクトリがあります。その抽象ファクトリを登録して、インジェクション ファクトリとして使用できますか?
これは私が持っているものです:
望ましい状況:
つまり、StaticLevelFactory を取り除きたいのです。
java - ひねりを加えた AbstractFactory
私はプログラミングの問題で立ち往生しています:
私の Eclipse IDE には、ProjectA と ProjectBという 2 つのJavaプロジェクトがあります。ProjectB は ProjectA を参照します
ProjectA: ClassA でクラスを宣言し、ProjectB: ClassB でクラスを次のように宣言しました。
ProjectA には、ClientClass というクラスもあります。この ClientClass は、以前は ClassA のインスタンスを作成して使用するために使用されていました。しかし、環境設定に基づいて、ClientClass に ClassA または ClassB を使用するオプションを提供する必要があります。
これは、AbstractFactory パターンの問題のように思えたので、そう思いました。ClassA または ClassB へのアクセスを提供する Factory を作成する必要があります。ClientClass は、ClassA または ClassB であることを認識しないでください。これには、ClassA と ClassB のインターフェイスを作成する必要があります。
私が遭遇した問題:
- ClassB は別のプロジェクトにあるため、ClientClass は ClassB を直接参照できません (インポート ステートメントや新しい呼び出しはありません)。これは Eclipse IDE の制限かもしれませんが、これら 2 つのプロジェクトを jar ファイルとして表示する場合にも意味があります。循環的な関係は避けられます。
- ClassA と ClassB の Factory インターフェイスと共通インターフェイスを作成できず、AbstractFactory パターンを介して ClassAFactory または ClassBFactory を提供します。これは、ClassA と ClassB で呼び出されるメソッドが静的メソッドであるためです。これらのクラスのメソッドは、インターフェイスに存在する必要があります。しかし、Java では、「abstract static」修飾子を持つことはできません。
誰でもこの問題のエレガントな解決策を提案できますか?