2009-08-17 29 views
2

Web项目中可以使用哪种模式?用于向维基页面添加评论的模式?

我正在用ASP.NET开发一个wiki项目。在我的结构中,每个维基条目可以有 评论。

哪种方法是最好的:

wikiEntry.AddComments(newComment); 

wikiEntry.Comments.Add(newComment); 

entryManager.AddComment(wikiEntry, newComment); 
+0

我有点困惑。首先是非常简单的。但第二种方法更加实用和可维护。 – devran 2009-08-20 17:04:09

回答

3
wikiEntry.AddComments(newComment); 

,客户端代码很简单,没有关于意见如何内部表示担忧。

wikiEntry.Comments.Add(newComment); 

错误,客户端应该担心意见,如果空?没有信息隐藏

entryManager.AddComment(wikiEntry, newComment); 

错误,responsabilities都是错误导致程序代码

1

封装建议1.我会与去。 (但这不是我实际做到的)。

0

如果评论是真正的意见,你可以执行各种操作,比如上市,删除列表,添加,重命名,改变,我会跟

wikiEntry.AddComments(newComment); 

go如果wikiEntry莫名其妙地管理评论和内部你能做的就是增加新的唯一的事情,我会去用:

wikiEntry.Comments.Add(newComment); 

我永远不会使用:

entryManager.AddComment(wikiEntry, newComment); 
+0

然后您使用wikiEntry.Save()进行保存过程? – devran 2009-08-17 08:12:18

0

所有其他thigh是平等的,我会去:

wikiEntry.AddComments(newComment);

这似乎是最简单和最清晰的方式来表示你在做什么。我发现最简单的方法通常是最好的。

1

除了以前的答案,我会写只有第二种方式:

wikiEntry。 Comments.Add(newComment);

这种方式不是那么糟糕对方说

  1. 所有的工作涉及到通过评论财产,这是很容易和直观的进行评论。

  2. 没有必要为所有者对象的每个新功能添加新方法(如AddComment,RemoveComment,FindComment等)。这样所有者对象不包含所有内部对象的方法,它更小,更干净。有干净的代码分离。

  3. 如果你想查询评论,你只需要这样做,并且不需要向所有者添加特定的FindBySomething方法。

您可以使评论永不为空 - 在每次调用时都会对null进行不必要的测试。 一般来说,我没有看到隐藏信息的问题,但这可能取决于特定的场景或应用程序。

微软在他们的控件中广泛使用这种模式。查看DataGrid的属性Items和Attributes。

0

我肯定会去与wikiEntry.Comments.Add(newComment)方法。我在下面列出了我的理由。它感觉很直观,因为它与Microsoft现有控件的工作方式相同,因此您的代码自然感觉就像是代码库的一部分。

它将一件事情的功能 - 评论 - 分成它自己的职责范围。在Comments集合中,您可以添加,编辑,删除,排序等。这样,如果您想要也能够添加,编辑,删除,排序等参考列表,编辑,版主,历史快照,不管你是否希望为每一个这样的集合,许多/你可能不会这么做)

你可以在其他类中重用评论集合,并且已经有内置的功能用于处理对列表的修改。

想想:wikiEntry.Comments [parentComment] .Comments.Add(newComment);

为您提供了一种表示嵌套注释的简单方法。