Si vous utilisez WinForms, vous devez utiliser le modèle de conception MVP (Model-View-Presenter). Dans ce cas, chaque vue a sa propre ISomethingView
qui contient les propriétés et les événements, par exemple:
public interface IBaseView
{
void Show();
void Close();
}
public interface ILoginView : IBaseView
{
string Login { get; }
string Password {get; }
event EventHandler SignIn { get; }
}
Et maintenant votre UserControl doit mis en œuvre cette interface.
pour chaque vue Aussi, vous devez créer un présentateur qui est responsable de la communication entre la vue et une logique commerciale:
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();
}
}
}
Vous pouvez utiliser conteneur DI pour résoudre tous les I*Vies
, par exemple:
public class LoginUserControl : UserControl, ILoginView
{
public LoginUserControl()
{
this.loginPresenter = new LoginPresenter(this, DIContainer.Resolve<IOtherView>());
}
}
Utilisez-vous l'architecture MVVM avec WinForms? Avez-vous des objets domaine/entreprise clairement définis? Nous avons besoin de plus d'informations sur la portée et la conception de votre application. – Dai
Je remarque que si vous voulez suivre les meilleures pratiques, vous n'utilisez peut-être pas WinForms. Quelle est la justification commerciale de l'utilisation de WinForms au lieu de WPF, par exemple? – Dai
Actuellement le projet est simple, la classe Employé fait partie des classes modèles créées par EF et je veux suivre le modèle MVP – apaz