Quelques commentaires sur ce
Première Ce
private void mView_LoadSecondForm(object sender, EventArgs e) {
SecondForm newform = new SecondForm(); //Second form has its own Presenter.
newform.Load(); // Load the form and raise the events on its presenter.
}
Qu'est-ce qui se passe si vous décidez de remplacer ThirdForm SecondForm? Vous devez trouver chaque appel de newform = new SecondForm et faire le changement.
Au lieu de cela vous devez envelopper la création du SecondForm dans un objet de commande
public class CreateSecondForm : ICommand
{
public void Execute() {
SecondForm newform = new SecondForm(); //Second form has its own Presenter.
newform.Load(); // Load the form and raise the events on its presenter.
}
}
Puis ici et tout autre lieu fait apparaître la deuxième forme utilise cette syntaxe
private void mView_LoadSecondForm(object sender, EventArgs e) {
CreateSecondForm createCmd = new CreateSecondForm();
createCmd.Execute(); // Load the form and raise the events on its presenter.
}
Si vous voulez subsitute une complètement nouveau formulaire pour SecondForm alors vous avez seulement un endroit où vous devez aller. Si vous voulez transmettre des valeurs d'état ou de configuration, utilisez le constructeur de la commande. Vous pouvez même passer dans un autre Presenter ou View et demander à la commande d'extraire les informations de son interface.
Une autre chose que je recommande est que vous enregistrez les formulaires qui implémente vos vues au lieu d'utiliser la nouvelle commande. Ceci est fait pendant l'initialisation et le registre se bloque de votre classe d'application principale.
Par exemple.
public class MySecondForm : ISecondFormView, IViewForm
{
//Stuff ....
Public ViewFormEnum ViewFormType {
return ViewFormEnum.SecondForm;
}
//Stuff ....
}
ailleurs dans le logiciel
public void InitializeApp() {
//Stuff ....
MyApp.ViewForm.Add(new MySecondForm);
//Stuff ....
}
Ensuite, la commande est comme configuration cela.Pardon my C# ce n'est pas ma langue principale. L'avantage de cette approche est que l'assemblage contenant les formulaires peut être remplacé par un ensemble différent avec un ensemble de formulaires différent. Ceci est particulièrement utile pour automatiser les tests où des classes fictives peuvent être créées à la place du formulaire. Vous pouvez également le configurer pour gérer les vues nulles, ce qui est utile pour libérer un sous-ensemble de votre application complète.
Bien que je vous recommande fortement d'utiliser la commande pour envelopper la création de vos vues. La deuxième suggestion de l'enregistrement de View peut être excessive en fonction de l'application. Dans mon application CAO/FAO, j'ai des dizaines de boîtes de dialogue et plusieurs différentes formes principales utilisées pour différents aspects de la mise en place et du contrôle d'une table de découpe métal 2D. Cependant, dans certaines autres applications de mon entreprise, j'utilise une approche simple car ce sont principalement des utilitaires simples.