問題タブ [static-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.
c++ - 基本クラスの静的ファクトリ メソッドから保護されたコンストラクターへのアクセス
基本クラスに静的ファクトリ メソッドがあります。いくつかの理由により、各派生クラスをこのファクトリ メソッドによってインスタンス化する必要があるため、これらのクラスはすべて保護された ctor を持っています。
実際の状況では、Create 関数はエラー処理と共に追加のロジックを実行します。
保護されたctorにアクセスできないため、そのコードは明らかにコンパイルされません。
最も一般的と思われる最初の解決策は、派生クラスでのフレンド宣言です。しかし、それは機能しますが、私はそれが好きではありません:
- 各派生クラスにそのような宣言を追加する必要があります
- これは友達です
より一般的なアプローチを考えて、私は次のようなことを試みていました:
それは機能しますが、私には奇妙に見えます:
- 実際のポインタ型は CreateHelper ですが、この関数の外ではわかりません
- このアプローチでは、基本クラスへのポインターを使用するため、基本ファミリが多態的である必要があります (この条件は常に満たされている必要があるようですが、それでも言及する価値があります)。
私の質問は
- 最後のアプローチについてどう思いますか?
- それは悪いデザインと見なされますか?
php - 静的ファクトリの適切な使用
いくつかの依存関係を持つクラスがあります。現在、これらはコンストラクターで設定されています。
これは IoC と DI に関して設計が不適切なので、依存関係がコンストラクターに存在するように再設計したいと考えています。
これにより、テストがはるかに簡単になりますが、クライアントがすべての依存関係をインスタンス化する必要はありません。これらは厳密に の内部クラスですThing
。以下で提案されているように、これは静的ファクトリの良い候補でしょうか? ただし、これにより、依存関係として必要なThing
依存関係をインスタンス化する方法が変更されます (つまり、コンストラクターではなくセッターを介して依存関係を設定する必要があります)。私が提案する解決策は以下のとおりです。より良いアプローチはありますか?