Question

Je travaille sur un projet personnel qui est essentiellement un éditeur de code. Imaginez le menu standard de fichiers avec des éléments de menu Nouveau, Ouvrir, Enregistrer, Enregistrer sous, Enregistrer tous, Fermer, Fermer tout.

Je suis coincé avec une bonne conception. À l'heure actuelle je:

  • Une classe de document qui représente un document - le contrôle d'édition de code, onglet correspondant dans la barre d'onglet et diverses propriétés telles que la légende, nom de fichier, etc IsModified
  • .
  • Une classe de documents qui représente tous les documents ouverts. Contient des méthodes telles que New, Open (FileName), ...

Le problème est que je ne peux pas savoir quelle commande classe / menu est responsable de quelles tâches.

Par exemple, avec Fichier-> Nouvelle commande de menu est simple -. Appeler Documents.New et c'est tout

Mais qu'est-ce File-> Open? La méthode Documents.Open attend le nom de fichier en tant que paramètre. Donc, avant d'appeler cette méthode, je dois ouvrir une boîte de dialogue de sélection de fichier, permet de selectionner des fichiers et pour chaque fichier appeler Documents.Open (FileName). Où est le meilleur endroit pour ce code de soutien, dans la commande de menu, réécrire Documents.Open et le mettre là?

La même chose avec des actions Enregistrer. Ce qui est responsable de la sauvegarde? Est-elle des documents de classe qui utilise Document.Editor.SaveToFile (FileName) ou mieux créer méthode Save dans la classe de document? Quelque part au milieu aussi besoin de demander à l'utilisateur s'il veut enregistrer le document en cours ...

Je suis coincé. Toutes les idées?

Modifié:. Le langage de programmation est Delphi

Était-ce utile?

La solution

à mon humble avis, vous ajoutez trop de responsabilités à votre classe de documents. La seule responsabilité de la classe des documents devrait être de maintenir la collection de documents avec une fonction associée (par exemple, gérer plusieurs instances de même document, vérifier si tous les documents sont fermés, compter les enfants, etc.)

Ouverture d'un document ou même la création d'un nouveau document (par exemple, si vous devez choisir un format) sont des opérations distinctes qui aboutissent finalement dans un nouveau document qui est ensuite ajouté à la classe de documents. À mon avis, vous ne devriez même pas en interaction avec la classe de documents jusqu'à ce que vous êtes prêt à remettre l'objet de document.

J'espère que vous avez une classe pour représenter l'interface utilisateur et pour interagir avec l'utilisateur pour obtenir toutes les informations nécessaires pour créer ou ouvrir un fichier. Vous devez tout gérer à partir de là. Dans le cas contraire, vous entachant votre modèle avec des choses liées à l'interface utilisateur.

Autres conseils

Vous avez besoin d'un objet Singleton (DocumentManager) qui gère toutes les opérations de documents. Cela aura des fonctions telles que:

  • Obtenir (idlist)
  • GetNew
  • Enregistrer (Liste de documents)
  • Actualiser
  • etc ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top