モデルビュー講演者、パス主体の間に見られていますか?

StackOverflow https://stackoverflow.com/questions/534054

  •  22-08-2019
  •  | 
  •  

質問

編集:受付はクリス-ホームズの対応が常に準備refactorれば良。よろしく!

ことなどをサポートとのMVPには、どうするのがベストなのにパス主体別す。

うえい CustomerSearchView/Presenter, は、doubleClickていきたいと思っている CustomerEditView/Presenter.い私の意見について知り、モデルな作ctorねてきました。 ICustomer パラメータの設

私の反射いです

CustomerSearchView 新規作成し CustomerEditView, を創造していくかについて独自の表そして私 CustomerSearchView によって次のような処理が行わ:

var customerEditView = new CustomerEditView();
customerEditView.Presenter.Customer = this.Presenter.SelectedCustomer;

その他のアプローチを可能にする CustomerDTO クラス、 CustomerEditView 受け入れるもの CustomerDTO, いと思うのでのコミュニケーションも楽しみの作業も簡単です。

申し訳のための基本がいかに決定されるかという問題すべての例んでいるという点にすべきと思うかもしれないが、sgsのブラウンフィールドプロジェクトを組み合わせたメーターを備え、これまではこの頭痛...

役に立ちましたか?

解決

私はあなたの意見を示している正確にどのように知っていないので、ここではあなたの具体的なアドバイスを与えるために少し難しいです。これは私が前に、この種のものをやった方法です。

私たちがやったことはCustomerSearchViewPresenterはOpenCustomer(はcustomerId)のようなイベントを発生していました。 (それはあなたの検索ビューは、それらだけのものであろう。検索ビューは、あなたがOpenCustomer(顧客)を呼び出すことができます記載されている全体のCustomerオブジェクトを持っている場合は顧客データとはcustomerIdのいくつかの作品を持っていることを想定している。しかし、私はビルドしないだろう検索ビューと、それは全体のオブジェクトを移入することができます...私たちは、データの面で軽量なGoogleの検索ビューを保持します。)

アプリケーション内のどこかには、OpenCustomer()イベントをリッスンし、(と私は私のためにこのようなものを行う私のIoCコンテナに延期するつもりプレゼンター/ WニューCustomerEditViewを作成するタスクを実行するイベントハンドラです私はどこでも)「新しい」キーワードを使用する必要はありません。ビューが作成されたら、私たちは新しいCustomerEditViewにID(または顧客オブジェクト)に沿って通過し、それを表示することができます。

OpenCustomer()イベントを一覧表示する責任があるとCustomerEditViewの作成を行い、このクラスは、一般的に我々のアプリでコントローラクラスのいくつかの並べ替えです。

さらに、このような状況を簡素化するために、私はこの別の方法をやった:アプリケーションまたはモジュールの起動時に、私はCustomerSearchView(&プレゼンター)とCustomerEditView(&プレゼンター)の両方を作成します。 CustomerSearchViewは、編集のために顧客を開くために必要がある場合、CustomerEditViewはOpenCustomerイベントへの応答となり、それ自体にデータをロードし、それを行うことになっているものは何でもコンテナに自分自身を表示する方法を知っています。

だから、これを行うには複数の方法があります。

他のヒント

いかがます:

//In CustomerSearchPresenter
var presenter = new CustomerEditPresenter();
var customerEditView = new CustomerEditView(presenter);
presenter.SetCustomer(customer);

//In CustomerEditPresenter
public void SetCustomer(customer)
{
    View.Name = customer.Name;
    View.Id = customer.Id;
    ...
}

では、あなたがアクションを実行させる必要がある、あなたの顧客の検索ビューは、ちょうどそのプレゼンターに委譲するべきだと思います。

カップルの重要な知見を自然流下で掛け流しのいずMVPコード:

  1. このプレゼンターを駆動するのではなく、その他の方法です。
  2. が1です。の必要性についてあまり知らない発表者が存在します。以下の依存関係はメンテナンスが容易です。

アプリケーションに見るイベントの財産場合/減結合回路網に恵ます。以前の回答: モデル-ビュー-プレゼンターなどをサポート

  1. いていMSプリズム4、素敵なナインターフェース。もSilverlight、WCFします。などを行い、取り扱いを促進し、ユーザーのための確認からの"汚染"直接アクセスすることです。

  2. いているPageFunction()文書には、WCFとして、どのように"通話"ページからもれて引き返す事でしょう。

この(javascript、申し訳ありません):

ユーザーをダブルクリックで顧客の顧客リスト:

CustomerList.onDblClick(customerId){

  app.fireEvent('customerEditRequest', id)

}

...

app.onCustomerEditRequest(id){
  this.mainRegion.requestNavigate('customers/edit', id);
}

ばーシャンビューの再生リスト編集画面した落---

CustomerEditView.onNavigatedTo(context){
  this.model.load(context.parameters.id));
}

CustomerEditView.onSaveButtonClick(){
  this.model.save();
  app.fireEvent('customerEdited', id);
}

...

app.onCustomerEdited(id){
  app.mainRegion.requestNavigate('customerlist', id);
}

いくつかの異なる方がいいで

  1. 送信コールバック関数のフォームの編集から、お客様の一覧です。フォームの編集を呼び出していたいものがで呼び出されます。

  2. てのフォームの編集を上げる"customerEdited"イベントに耳を傾ける対応(アプリ-ワイドバス)

  3. 利用申請の一大イベントに合わせたバスの管理のイベントの理由は中央を示します。

私は、私の見解は、彼らのプレゼンターとの通信持つために使用されるが、離れているから移動してきました。これは、パターン(これらの利点を強要するだけの要因を逸脱ため、それ自体ではない理由)の本来の定義に準拠していません。ビューは、理想的にはダム、できるだけ少数の依存関係を持つように保持する必要があります。 Viewは、デリゲート/イベント/いくつかの「ファイア・アンド・フォーゲット」機構を介してプレゼンター/ワット(任意の「オブザーバー」)を通信する必要があります。実際のところ、私は、特にビューイベントと(まれ)プレゼンターに再火災プレゼンター/ wのcommuniteする、またはシステムまたはプレゼンター固有のイベントバスと通信するためのいずれかを傍受するためにMVPにコントローラを導入しました - 私を有効にしますビューに触れて/ wのメカニズムを警告するユーザのアクションを変更します。しかし、イベントバスに注意する必要があります。もうすぐあなたはそこにすべてのイベントを投げ始める、アプリはおしゃべり/イベントを処理して泥沼取得し、イベントは、.NETで最速のものではありません。 Sunchronizationはウルアプリは、ユーザーとのより多くの「会話」の相互作用を持っている必要がESP場合は、追加の関心事である。

はプレゼンターが有珠図/プロセス固有、ビュー(ビュー・モデル)であるが、再利用できることに留意すべきです。プレゼンター強くカップルビュー封じ込め/委任関係にあるビューを持つ/その再利用を制限します。私はとにかくオブジェクトを作成する方法を知っている必要があり、どのように多くの場合、あなたはそれをテスト/作成した後、別の意味的に類似したいずれかのオブジェクトを変更できますので、これは、いくつかのDIによって減少させることができたが、私はDIコンテナは、ほとんどの場合(に不必要な複雑であることがわかりました?)。コンクリート依存性は、他の層を除いてどこにも行かない/デバッグ/トレースに物事がより困難に/より多くの不分明を追加します。 「シンプル」を行うことを好む主に最近けれどもキック、とにされて私の工場で/「1対1」ところでテーブル/エンティティをDBとnを追加するために必要な有珠山がありますから、ほとんどのアプリケーションのための作品/ ORMマッピングオブジェクトtaht一般的な文脈で/異なるアプリケーションを提供するために必要とする(ポイントではありません)uは、彼らがどのように動作するかを理解していても、彼らは必要以上に物事を難しくしている一般的なサードパーティ製のORMツールの複雑ます。

また、MVPでモデル(MVCのように)を観察するために見るためにまだ非常に可能ですので、私はこれを除外するのは迅速ではないでしょう。私はこれを自分で行うことを好まないが、それは」パターン 『を破る』しません。私は「円形ループ」ところでMVCコンポーネント(ビューモデルを知ること)のようなdidntのため、実際のところ、私は約10年前にMVPに似たものを開発しました。私はクリーンな分離がところでビューとモデル有することが好ましいこと公言(MVCを含む)ならびに(モデルの変更を処理するために、より多くのインテリジェンスが必要になるビューを意味woujld観察モデル)できるだけダムビューを維持したいすべてのこれらのパターン。私がやってしまったことは、私は、「変更通知者」として、ビューに渡すためにモデルの「基礎構造」を使用MVVMと戦略パタパタ、のようなものでした。これは保たれ、すべてのビュー目的別で柔軟な/再利用可能(タフコンボ)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top