2009-08-17 13 views
2

Quel modèle pourrait être utilisé dans des projets Web?Quel schéma pour ajouter un commentaire à une page wiki?

Je développe un projet wiki avec ASP.NET. Dans ma structure, chaque entrée wiki peut contenir des commentaires .

Quelle est la meilleure façon:

wikiEntry.AddComments(newComment); 

wikiEntry.Comments.Add(newComment); 

entryManager.AddComment(wikiEntry, newComment); 
+0

Je suis un peu confus. Le premier est très simple. Mais la seconde méthode est beaucoup plus utilisable et maintenable. – devran

Répondre

3
wikiEntry.AddComments(newComment); 

droit, le code client est simple, pas de soucis sur la façon dont les commentaires sont représentés en interne.

wikiEntry.Comments.Add(newComment); 

mal, le client doit se soucier de commentaires si nul? il n'y a pas cacher l'information

entryManager.AddComment(wikiEntry, newComment); 

mal, responsabilities ont tort résultant dans un code de procédure

1

Encapsulation suggère 1. Je vais avec ça. (Mais ce n'est pas comme ça que je le ferais).

0

Si les commentaires est vraiment une liste de commentaires où vous pouvez effectuer diverses opérations, comme l'inscription, supprimer, ajouter, renommer, changer, je partirais avec

wikiEntry.AddComments(newComment); 

Si wikiEntry gère en quelque sorte le commentaire interne et la seule chose que vous pouvez faire est d'ajouter de nouvelles, je partirais avec:

wikiEntry.Comments.Add(newComment); 

Je ne retournerai jamais:

entryManager.AddComment(wikiEntry, newComment); 
+0

Ensuite, vous utilisez wikiEntry.Save() pour enregistrer le processus? – devran

0

Tous les autres étant égaux, je voudrais:

wikiEntry.AddComments (nouveauCommentaire);

Il semble que la manière la plus simple et la plus claire de représenter ce que vous faites. Je trouve que le moyen le plus simple est généralement le meilleur.

1

En plus des réponses précédentes, je vais écrire seulement la deuxième façon:

wikiEntry. Commentaires.Ajouter (nouveau commentaire);

De cette façon est pas si mal que d'autres dit

  1. Tous les travaux se rapporte aux commentaires faits par la propriété Commentaires, qui est facile et intuitive.

  2. Il n'est pas nécessaire d'ajouter une nouvelle méthode pour chaque nouvelle fonctionnalité à l'objet propriétaire (comme AddComment, RemoveComment, FindComment, etc.). De cette façon, l'objet propriétaire ne contient pas de méthodes pour tous les objets internes, il est plus petit et plus propre. Il y a une séparation propre du code.

  3. Si vous souhaitez interroger les commentaires, il vous suffit de le faire, et il n'est pas nécessaire d'ajouter des méthodes FindBySomething spécifiques au propriétaire.

Vous pouvez faire des commentaires ne jamais être null - qui font des tests inutiles pour null à chaque appel. En général, je ne vois pas de problème avec le masquage d'informations, mais cela peut dépendre d'un scénario ou d'une application spécifique.

Microsoft utilise largement ce modèle dans ses contrôles. Voir DataGrid avec les propriétés Items et Attributs.

0

Je voudrais certainement aller avec la méthode wikiEntry.Comments.Add (newComment). J'ai énuméré mes raisons ci-dessous.

Il semble intuitif car il fonctionne de la même manière que les contrôles existants de Microsoft, de sorte que votre code se sent naturellement comme une partie de la base de code.

Il sépare la fonctionnalité d'une chose - Commentaires - dans son propre domaine de responsabilités. Dans la collection de commentaires, vous pouvez ajouter, éditer, supprimer, ordonner, etc. De cette façon, vous ne faites pas de nuage dans l'espace de noms principal si, par exemple, vous souhaitez ajouter, éditer, supprimer, ordonner, etc. , Editeurs, modérateurs, instantanés historiques, peu importe (ne pas dire que vous voudriez une collection pour chacun d'entre eux, beaucoup/plus vous ne le feriez probablement pas)

Vous pouvez réutiliser la collection Comments dans d'autres classes et avez déjà intégré la fonctionnalité pour gérer les modifications de la liste.

Pensez: wikiEntry.Comments [parentComment] .Comments.Add (nouveauComment);

vous permet de représenter facilement les commentaires imbriqués.

Questions connexes