Windows 포맷을 MVP로 만들기

8453 단어 WinFormsC#
개시하다
Windows 포맷은 코드를 예쁘게 쓰기 어렵습니까?닮다
나는 Model-View-Presenter라는 모델로 구성 요소를 분할해 보았다.
이루어지다
View 설계
화면은 이런 느낌으로 2개의 라벨과 1개의 단추를 배치한다.
뷰입니다.

View 커넥터
방금 테이블(View)에 정보를 입력할 인터페이스를 정의합니다.
버튼을 눌렀을 때 메시지 상자를 보내고 싶어서 분기구를 삽입할 수도 있다.
이 물건은 폼에서 실현될 것이다.
IMainForm.cs
public interface IMainForm
{
    string Title { get; set; }
    string Author { get; set; }
    Action<string> ShowMessageCommand { get; set; }
}
Presenter
다음은 Presenter 입니다.이 녀석은 뷰로 표시할 정보를 준비하고 있다.
구조기로 View를 수신하고 방금 인터페이스를 통해 정보를 전달합니다.
MainFormPresenter.cs
public class MainFormPresenter
{
    private IMainForm _view;
    public MainFormPresenter(IMainForm view)
    {
        _view = view;
        Initialize();
    }

    private void Initialize()
    {
        // HACK: 本当はこのあたりはModelから取得されるはずのデータ
        _view.Title = "MvpWinFormsTest!";
        _view.Author = "mono";
        _view.ShowMessageCommand += (msg) =>
        {
            MessageBox.Show(msg);
        };
    }
}
View
비디오 코드.
ImainForm을 실제로 설치하면 프레젠테이션으로부터 정보를 얻을 수 있습니다.
MainForm.cs
public partial class MainForm : Form, IMainForm
{
    public MainForm()
    {
        InitializeComponent();
    }

    public string Title
    {
        get { return label1.Text; }
        set { label1.Text = value; }
    }
    public string Author
    {
        get { return label2.Text; }
        set { label2.Text = value; }
    }
    public Action<string> ShowMessageCommand { get; set; }

    private void button1_Click(object sender, EventArgs e)
    {
        ShowMessageCommand("button1 Clicked!");
    }
}
생성 프로세스 실례
창을 표시할 때 창에 연결된 Presenter를 만들 수도 있습니다.
Program.cs
static class Program
{
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var f = new MainForm();
        var p = new MainFormPresenter(f);
        Application.Run(f);
    }
}
액션
버튼까지 포함해서 잘 돌아가는 것 같아.

총결산
MVP 같은 방법으로 이동할 수 있다.
분위기상으로는 MVM의 데이터를 스스로 조립해 묶어놓고 하는 것처럼 느껴진다.
이번에는 다음과 같은 의문을 남겼다.
  • 델리에서 메시지가 나왔지만 View에서Presenter를 참조하여 호출하는 것이 좋습니다
  • 화면 이동/입력 대화상자 어떻게 실현
  • DataGridView, BindingSource, DataTable를 사용하기 시작해도 순조롭게 조립할 수 있을까
  • 이런 방법으로 코드의 유지보수성을 높이는 것은 어떤 상황
  • 나는 많은 샘플을 찾았지만 엉망진창인 화면을 보지 못했다.
    윈포즈에 대응하는 MVP용 부품도 많지만 모두 모니터로 돼 있어 시도하지 않았다.
    나도 좀 더 정교한 그림을 만들어 보고 싶다.
    참고 자료
    mrts/winforms-mvp: Windows Forms example of the Passive View variant of the Model-View-Presenter pattern
    https://github.com/mrts/winforms-mvp

    좋은 웹페이지 즐겨찾기