J'apprends le modèle Passive View pour garder mon application C# WinForms plus facile à tester et à maintenir.Quelle est la meilleure façon d'implémenter des événements dans Passive View?
Cela a bien fonctionné jusqu'à présent, mais je me demande s'il existe une meilleure façon d'implémenter Evénements que je ne le fais maintenant (et de les garder testables). C'est à quoi il ressemble (en omettant le code non pertinent pour cet exemple). Fondamentalement ce que je cherche s'il y a un moyen d'ignorer les événements à la fois dans le présentateur et dans le formulaire, 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!
Je ne peux pas vous aider mais ce que vous demandez à propos de semble intéressant. Pourriez-vous me diriger vers votre ressource en ligne préférée qui décrit la technique que vous essayez de mettre en œuvre? –
@Jay - Une recherche rapide sur Google de "Model View Presenter" devrait vous donner toutes les informations dont vous avez besoin. – Josh
@Jay Martin Fowler a inventé le modèle de conception Passive View lorsqu'il a retiré le modèle MVP et l'a divisé en deux nouveaux. Où Passive View est l'un d'entre eux, voir http://martinfowler.com/eaaDev/PassiveScreen.html – devghost