私はプレゼンタークラスから新しいドメインクラスをリファクタリングしましたが、インスタンス化する場所を特定できません。パッシブビューアーキテクチャでPresenterクラスの依存関係を作成する場所はどこですか?
これは、従来のプロジェクトでは維持されていなかったより大きな進行中のリファクタリング作業の一部です。
現在、プレゼンターはビューのOnLoadイベントによって作成されており、ビューはコンストラクターのパラメーターとして渡されます。発表者のすべてのパブリックメソッドはパラメータなしで返されます。ビューのパブリックプロパティを使用してビューと通信します。
本質的に謙虚な形であるという見解は、すべてが発表者に完全に依存します。
これは一般的なパッシブビューのパターンであり、私はそれを続けていきたいと思います。それが私のジレンマに私をもたらします。私は、プレゼンターが使う新しいドメインオブジェクトのインスタンスを作成する必要があります。
- 私がコンストラクタに渡した場合、ビューはそれを作成して不要な依存関係を取得します。
- プレゼンター内のどこにでも作成すれば、ユニットテストでモックオブジェクトに置き換えることはできません。
- プレゼンターのパブリックプロパティにすると、それが使用されるプレゼンターメソッドに作成オーダーの依存関係が導入され、それを作成する外部クラスの責任を引き継いでいません。
私は現在依存性注入フレームワークを使用していません。私は興味を持っていますが、将来はソースコードを使用して、第三者フレームワークをミックスに導入するのはまだまだ脆弱です。
私は任意の提案に開放されています。
あなたのデザインは面白いです。あなたのビューは受動的なビューパターンに合っていますが、プレゼンターとコントローラーの両方でそれが見られることはありません。私が見てきた例では、プレゼンターがドメインオブジェクトやデータストアに重い持ち上げをしたり話したりしています。あなたの中には中級者のプレゼンターと仕事をしているコントローラーがいます。余分なレイヤーのメリットは何ですか? –
利点は明らかです...すべての重い作業はプレゼンターが行います。コントローラの責任は、複雑なシナリオでのナビゲーションを管理することです。ここでは、ビューが他のものを知らないウィザードの例として、分離されたナビゲーションが実現されています。すべてがコントローラによって処理されます。 – ruslander