Question

J'apprends le modèle de vision passive pour garder mon application C # WinForms plus facile à tester et à entretenir.

Il a bien fonctionné jusqu'à présent, mais je me demande s'il y a une meilleure façon de mettre en œuvre Événements que la façon dont je le fais maintenant (et les garder testable). C'est à quoi il ressemble (code omettant pas pertinent pour cet exemple). fondamentalement, ce Je cherche si est il y a un moyen de sauter accrochage événements à la fois dans le présentateur et sous la forme, je préférerais faire tout le travail dans le présentateur.

Mon point de vue ressemble à ceci:

public interface IApplicationView
{
    event EventHandler Find;
}

Mon présentateur ressemble à ceci:

public class ApplicationPresenter
{
    private IApplicationView _view;
    private IApplicationDomain _domain;

    public ApplicationPresenter(IApplicationView view) : this(view, new ApplicationDomain()) {}
    public ApplicationPresenter(IApplicationView view, IApplicationDomain domain) {
        _view = view;
        _domain = domain;

        HookupEventHandlersTo(view);
    }

    private void HookupEventHandlersTo(IApplicationView view)
    {
        view.Find += delegate { FindAction(); };
    }

    public void FindAction()
    {
        // ...
    }
}

Mon WinForm ressemble à:

public partial class Form1 : Form, IApplicationView
{
    private ApplicationPresenter _presenter;
    public event EventHandler Find = delegate {};

    public Form1()
    {
        InitializeComponent();
        _presenter = new ApplicationPresenter(this);
        HookupEvents();
    }

    private void HookupEvents()
    {
        searchButton.Click += Find;
    }
}

Merci!

Était-ce utile?

La solution

Une autre grande ressource pour l'apprentissage MVP avec WinForms est Jeremy Millers Construisez votre CAB série. J'ai trouvé ce incroyablement utile quand j'apprenais,

L'article sur Voir la communication Présentateur sera utile pour vous; il y a une bonne discussion ici sur l'utilisation des événements vs faire des appels directs. Mieux encore, le événement agrégateur article présente un « mécanisme de publication / abonnement » qui peut être utilisé au lieu des événements, tout en gardant le code testable. Telle est l'approche que je préfère personnellement, et ont eu un bon succès avec.

Autres conseils

Consultez cet exemple de la façon de mettre en œuvre la vision passive. Il a un bon moyen de câblage / Débrochage pour des événements entre la vue et le contrôleur qui met la plupart des travaux dans le contrôleur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top