1

私が取り組んでいるプロジェクトは、モバイル .NET CF ベースのアプリケーションです。その中に MVP パターンを実装する必要があります。現在、OpenNETCF.IoC ライブラリとサービスを使用しています。

Windows フォーム コードを SmartParts にリファクタリングする必要があります。

ナビゲーション シナリオの実装に問題があります。

// Show Main menu    
bodyWorkspace.Show(mainMenuView);

// Show First view based on user choice    
bodyWorkspace.Show(firstView);

// In first view are some value(s) entered and these values should be passed to the second view    
bodyWorkspace.Show(secondView); // How?

Windows フォーム ロジックでは、これは変数で実装されます。

var secondForm = new SecondForm();
secondForm.MyFormParameter = myFormParameter;

このロジックを MVP 用語で再実装するにはどうすればよいですか?

4

1 に答える 1

1

それはあなたのアーキテクチャに大きく依存しますが、これは私の提案です:

まず、ViewB は ViewA の情報を必要としませ。モデルまたはプレゼンターのいずれかで情報が必要です。ViewA と ViewB は同じ場所から情報を取得する必要があります。

これは、例として、サービスによって実行できます。これは次のようになります。

class ParameterService
{
    public int MyParameter { get; set; }
}

class ViewA
{
    void Foo()
    {
        // could also be done via injection - this is just a simple example
        var svc = RootWorkItem.Services.Get<ParameterService>();
        svc.MyParameter = 42;
    }
}

class ViewB
{
    void Bar()
    {
        // could also be done via injection - this is just a simple example
        var svc = RootWorkItem.Services.Get<ParameterService>();
        theParameter = svc.MyParameter;
    }
}

使用している IoC フレームワークでもサポートされているイベント集約も機能し、ViewA は ViewB がサブスクライブするイベントを発行します。この例はここにありますが、一般的に言えば、属性EventPublicationEventSubscription属性を使用します (前者は ViewA のイベントで、後者は ViewB のメソッドで)。

于 2013-09-23T13:52:25.227 に答える