0

はじめに: MVP を、いくつかの基本的な CRUD 操作を含む Windows フォーム アプリケーションのデザイン パターンとして使用しています。

要件 IView インターフェイスは複数のビューで使用されるため、抽象クラスとして実装したいと考えています。一般的な具体的な実装をいくつか提供できます (ダイアログ ボックスにエラー メッセージを表示するなど)。これで、プレゼンターと同じプロジェクトに IView が実装されました。このため、MVP パターンに違反しているため、このプロジェクトに Windows.Forms 参照を追加できません。

提案された解決策: 私の解決策は、IView を別の新しいプロジェクトに移動することでした。ここに勝利フォームの参照を追加します。これにより、上記を達成できます。

問題 これが良い設計かどうかわかりません。ここで何か規則に違反していますか?

4

1 に答える 1

3

次のように、Presenter プロジェクトでビュー インターフェイスを宣言し、Views プロジェクトで抽象基本ビュー クラスを宣言できます。

(プレゼンター企画)

public interface IView 
{
  void ShowErrorMessage(string message);
}

public interface IFooView : IView
{
  string SomeField { get; set; }
  //...
  event EventHandler SomethingClicked;
  //...
}

public class FooPresenter 
{
  private readonly IFooView _view;

  public FooPresenter(IFooView view)
  {
    // inject view here
  }

  public void DoSomething()
  {
    // error case
    _view.ShowErrorMessage("some message");
  }
}

(プロジェクトを見る)

public abstract class BaseView : IView
{
  protected void ShowErrorMessage(string message)
  {
    // implement shared behavior here
  }
}

public class FooView : BaseView, IFooView
{
  // view specific behavior here
}
于 2013-02-07T09:51:48.017 に答える