从UserControl显示Form的好习惯

时间:2016-12-23 16:15:57

标签: c# winforms design-principles

我想在开发WinForms应用程序时遵循良好实践设计模式。

我有一个带有“添加”按钮的UserControl来打开一个新表单,其中de user可以搜索Employees。我如何组织我的代码?

1 个答案:

答案 0 :(得分:1)

如果使用WinForms,则应使用MVP(Model-View-Presenter)设计模式。在这种情况下,每个视图都有自己的ISomethingView,其中包含属性和事件,例如:

    public interface IBaseView
    {
       void Show();
       void Close();
    }

    public interface ILoginView : IBaseView
    {
       string Login { get; }
       string Password {get; }
       event EventHandler SignIn { get; }
    }

现在你的UserControl必须实现这个界面。

对于每个视图,您还必须创建一个负责视图和业务逻辑之间通信的演示者:

    public LoginPresenter
    {
       // private variables 

       public LoginPresenter(ILoginView loginView, IOtherView otherView)
       {
           this.loginView = loginView;
           this.otherView = otherView;

           this.loginView.SignUp += OnSignUp;
       }

       private void OnSignUp(object sender, EventArgs eventArgs)
       {
            if (this.authService.Login(this.loginView.UserName, this.loginView.Password))
            {
                this.loginView.Close();
                this.otherView.Show();
            }
       }
    }

您可以使用DI容器解析所有I*Vies,例如:

    public class LoginUserControl : UserControl, ILoginView
    {
        public LoginUserControl()
        {
             this.loginPresenter = new LoginPresenter(this, DIContainer.Resolve<IOtherView>());
        }
    }