まず良い質問です。第二に、それは大した問題ではないかもしれません。私の個人的な好みは、ほとんどの場合、Presenter と View を View に接続することです。
このシナリオを比較してください。
public class SomePresenter
{
public ShowContactView(IContactView view)
{
IContact model = new Contact();
new ContactPresenter(model, view);
view.Show();
}
}
public class AnotherPresenter
{
public ShowContactView(IContactView view)
{
IContact model = new Contact();
new ContactPresenter(model, view);
view.Show();
}
}
public class YetAnotherPresenter
{
public ShowContactView(IContactView view)
{
IContact model = new Contact();
new ContactPresenter(model, view);
view.Show();
}
}
public partial class ContactView : Form, IContactView
{
public ContactView()
{
InitializeComponent();
}
}
これに:
public class SomePresenter
{
public ShowContactView(IContactView view)
{
view.Show();
}
}
public class AnotherPresenter
{
public ShowContactView(IContactView view)
{
view.Show();
}
}
public class YetAnotherPresenter
{
public ShowContactView(IContactView view)
{
view.Show();
}
}
public partial class ContactView : Form, IContactView
{
public ContactView()
{
InitializeComponent();
new ContactPresenter(new Contact(), this);
}
}
後者の方がコードの重複がはるかに少ないことがわかります。もちろん、それはばかげた重複です。または、共通の機能を共有機能に移動できると言うことができますが、それは単なる例にすぎません。その場合、アプリケーションの複数の部分で同じビューをインスタンス化する必要があります。
さらに、Presenter を認識している View の利点は、View プロジェクトで Presenter を参照するだけでよいため、異なる UI アプリケーションで同じ Presenter を再利用できることです。そうしないと、Presenter ですべての View プロジェクトを参照する必要があります。
しかし、より重要なことは、さまざまなモデルが自分のケースにどのように適合するかを確認することです. 正直なところ、さらに多くの可能性があります。この重複した質問を参照してください。