私が見たMVPの例のほとんどで、プレゼンターはエンティティを返すリポジトリを呼び出すサービスを呼び出します。私が取り組んできたほとんどのasp.net Webアプリケーションでは、ロジックは決して簡単ではありません。私の最後のプロジェクトでは、私の発表者は、画面に表示されるデータを取得するためにフープを飛ばしなければならなかったプレゼンターサービスレイヤーを呼び出しました。MVPでは、データモデルの複雑さはどのように処理され、どこでコントロールを動的に表示/非表示するのですか?
詳細:サービスレイヤーは、8つのエンティティオブジェクト(その中のいくつかは相互に入れ子になっています)をデータベースに照会し、それらのエンティティをXSDの1つの巨大なオブジェクトベースにマッピングします。そのxsdオブジェクトは、それを使って何かを行うために第三者図書館に渡されました。処理されたxsd objが返された後、コードは中間層ビューフォーマッタクラスを使用してその「xsd」オブジェクトを解析し、「モデルの表示」と呼ばれるものを抽出してビルドしなければなりませんでした。このViewモデルは、サービスレイヤからプレゼンタに返された後、リピータにバインドされたデータです。
- 表示/非表示制御のロジックはどこにありますか?それはDTOのメンバーか、またはプレゼンターがこの値を引き出すべきか? (ビューモデルのメンバとして持っていました)
- ネストされたViewModel(DTO)を持っていても構いませんか、他のユーザコントロールを使って複雑さを解消する必要がありますか?
- プレゼンターを使用するすべてのページ/ユーザーコントロールにプレゼンターを接続するにはどうすればよいですか。プレゼンターの同じインスタンスを必要とする5つのIViewsを持つ1つのプレゼンターを意味します。ユーザコントロールは自己完結型であるべきか、適切なプレゼンターを与えるために「親」IView(ページ)に依存すべきか?
ページが実装するインターフェイスを使用してそれをサービスレイヤーに渡すだけで(プレゼンターから)、サービスがIViewを水和させるのはなぜですか? (これを行うと、サービス層に参照があるようになりますが、それは悪いことではありません)。
public class ViewModel { public bool ShowHeight { get; set; } //Is there a bettter way to do this? public List<NestedViewModel> NestedViewModel { get { return _nestedViewModel; } } }
1.コントロールの.Visibleメンバーを「IView」インターフェイスの一部として実装し、プレゼンターにその値を設定させることが、方法になると思いますか?おそらく、「接着剤」は、コードが発生する?発表者、またはビュー? 3.ユーザコントロールの場合は、Property Dependency Injectionを使ってプレゼンタを設定することをお勧めします。あるいは、ユーザがinitまたはinitの間に独自のプレゼンタを制御する必要がありますか?私はそれが本当に状況に頼っていると思いますか? – EbbnFlow
1.個人的に見ることができる、または目に見えないことは、ビュー固有の機能であり、発表者はこれを管理すべきではありません。私たちが行ったことは、プレゼンターがビューにプロパティを設定したり、ビューでメソッドを呼び出すこと、またはモデルを通していくつかのインジケーターを渡すことによって、ビューに通知することです。 3.はい、例えば、nucleo.codeplex.comのMVPフレームワークではinit上でビューをプレゼンタに反映します。これは悪いアプローチではありません。そう、はい、ビューへのDI注入は問題ありません。私は状況が重要だとは思わない。カップリングが緩くなればなるほど。 –