2010-11-15 4 views
1

En pensant au SRP, je trouve qu'une application que j'écris devient incontrôlable pour notre interface/formulaire principal. Je voudrais le changer avant d'aller trop loin dans le projet.Comment gérer une grande interface pour une application WinForms?

Quelles sont les techniques pour créer une grande interface avec une "surface de dessin" avec barres d'outils, menus, etc.? J'aimerais aussi que ce formulaire soit facile à tester. Devrait-il y avoir d'autres classes qui savent comment contrôler le MainForm tel qu'un ChangedStateTracker (pour surveiller l'état sale), DocumentCreator ou quelque chose du genre "Fichier> Nouveau" un nouveau document?

Le problème que je rencontre est tant de méthodes à l'intérieur du MainForm.cs et il commence vraiment à être moche à maintenir.

Ceci peut être marqué CW si nécessaire. D'autres conseils/astuces seraient grandement appréciés.

+0

Divisez votre code. Les formulaires sont de toute façon créés en tant que classes partielles, donc organisez les méthodes en plusieurs fichiers de code, et bien sûr pensez à ce qui pourrait être des unités logiques de code qui peuvent être déplacées dans des classes séparées. En outre, si vous utilisez VS2010, envisagez d'utiliser des extensions telles que VS10x Code Map, ce qui est une aide précieuse pour gérer les gros fichiers de code. – TeaDrivenDev

Répondre

2

Si c'est une option, je créerais un ensemble de contrôles utilisateur qui produiraient ensemble le formulaire entier.

Ces contrôles utilisateur distincts peuvent alors avoir leur propre responsabilité et peuvent être testés séparément.

Pour la logique elle-même, créez des classes.

Vous pouvez créer des classes telles que CreateDocumentCommand qui implémentent certaines fonctionnalités. Lorsque, par exemple, le bouton/l'élément de menu nouveau document est cliqué, crée une instance de cette classe et l'exécute.

public interface ICommand 
{ 
    bool CanExecute { get; } 
    void Execute(); 
} 

public class SaveDocumentCommand : ICommand 
{ 
    public bool CanExecute 
    { 
     get 
     { 
      return MainForm.Instance.CurrentDocument.IsDirty; 
     } 
    } 

    public void Execute() 
    { 
     // Save your document here. 
    } 
} 

Ceci est d'ailleurs la façon dont WPF le fait.

+0

@Pieter - Yup la «surface de dessin principale» est déjà un contrôle sur son propre (et c'est déjà trop grand mais c'est une autre histoire). Il n'y a * vraiment * que la surface de dessin principale et les menus/barres d'outils. Je suis évidemment OK avec mettre des hooks de gestionnaire d'événements dans le 'MainForm.cs', mais avoir la logique de" nouveau document "(etc.) se sent juste * faux * là dedans ... – TheCloudlessSky

+0

Aussi - je pense que la" grande interface " dans mon titre est un peu trompeur (vu comme il n'y a pas grand-chose), désolé à ce sujet. – TheCloudlessSky

+0

Élargi la réponse. Peut-être que ça aide. –

Questions connexes