2010-05-07 5 views
1

Je travaille sur une application de cacao pour synchroniser des données entre deux dossiers.Un peu d'aide avec MVC

  • Il ont des profils (donc vous pouvez avoir plusieurs configurations)
  • Il est possible d'analyser les données
  • Il est possible de synchroniser les données

Im un peu confus. Tout d'abord je ne peux pas vraiment voir où avoir un modèle? Et combien de contrôleurs suggéreriez-vous? 1 WindowController ou AnalyzeController, SyncController etc.

Cela fait pas mal de temps que j'ai travaillé avec MVC. J'ai lu quelques articles mais il me manque des exemples concrets sur la façon de le diviser.

Cordialement.

Répondre

1

Le modèle de données gère les données et les relations abstraites entre les différentes parties des données. Les contrôleurs gèrent les opérations concrètes d'un ordinateur ou d'une interface humaine. La division clé est que le modèle de données ne sait pas d'où proviennent les données et s'en moque. Par exemple, il pourrait modéliser un dossier et son contenu mais les informations réelles dans le modèle pourraient provenir d'un vrai dossier sur un disque ou cela pourrait provenir d'un fichier plist complètement constitué ou provenir d'une interface utilisateur simulée d'un dossier. Le modèle de données s'en fout parce qu'il n'a aucun lien direct avec la réalité concrète. Il contient juste une description abstraite des données.

Les contrôleurs sont au contraire liés à une interface béton spécifique. Par exemple, si vous avez deux dossiers, vous aurez des contrôleurs spécifiques pour chaque dossier. Chaque contrôleur aurait une connaissance concrète du chemin réel vers le dossier ainsi que le mécanisme de lecture et d'écriture dans les dossiers. Ainsi, si un dossier est sur le disque dur local et qu'un autre est distant, chaque contrôleur comprendrait la différence. Si vous avez une interface utilisateur, l'interface utilisateur aurait son propre contrôleur.

Le travail des contrôleurs consiste à traduire de la réalité concrète au modèle abstrait. Dans ce cas, le contrôleur gère la connexion à un serveur distant, analyse le dossier, puis convertit cette information en un formulaire abstrait qu'il transmettrait au modèle de données. Cependant, le contrôleur n'enregistre pas de données et ne comprend pas comment les données sont liées les unes aux autres. Dans le cas d'une application de synchronisation, le modèle de données doit comprendre quels fichiers dans quel dossier et quels fichiers doivent être copiés ou mis à jour et où. Il dira ensuite à chaque contrôleur quels fichiers manipuler. Cependant, le contrôleur ne saurait pas pourquoi chaque fichier était manipulé.

L'objectif de conception est de créer un modèle de données qui modéliserait les dossiers et les fichiers, peu importe où ils résident, comment ils sont concrètement manipulés ou même s'ils existent réellement. De cette façon, vous pouvez facilement ajouter ou supprimer des interfaces en ajoutant ou en supprimant un contrôleur. Les contrôleurs eux-mêmes sont simples car ils ne contiennent aucune donnée et aucune logique de manipulation de données.

+0

Je le ferais dans l'autre sens: Avoir une classe Folder abstraite, mais aussi avoir des classes concrètes qui gèrent les spécificités d'accès à un dossier (réel ou prétendu) quelque part. My AnalysisController et SyncController (je ne sais pas à partir de la question si je leur ferais le même objet ou non) ne verraient et n'interagiraient avec les objets que comme des dossiers abstraits. Je n'aurais pas de contrôleur séparé pour chaque type de dossier. –