在wiki页面添加评论的模式是什么?

时间:2009-08-17 07:42:00

标签: architecture design-patterns

哪些模式可用于网​​络项目?

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

哪种方式最好:

wikiEntry.AddComments(newComment);

wikiEntry.Comments.Add(newComment);

entryManager.AddComment(wikiEntry, newComment);

6 个答案:

答案 0 :(得分:3)

wikiEntry.AddComments(newComment);

正确,客户端代码很简单,无需担心内部如何表示注释。

wikiEntry.Comments.Add(newComment);

错误,如果null,客户应该担心评论?没有信息隐藏

entryManager.AddComment(wikiEntry, newComment);

错误,责任错误导致程序代码

答案 1 :(得分:1)

封装暗示1.我会接受它。 (但事实并非如此)。

答案 2 :(得分:1)

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

wikiEntry.Comments.Add(newComment);

这种方式并不像其他人说的那么糟糕

  1. 所有工作都与通过评论属性完成的评论有关,这很简单直观。

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

  3. 如果您想查询评论,只需执行此操作,无需向所有者添加特定的FindBySomething方法。

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

    Microsoft在其控件中广泛使用此模式。请参阅DataGrid,其中包含属性Items和Attributes。

答案 3 :(得分:0)

如果评论确实是一个评论列表,您可以执行各种操作,例如列出,删除,添加,重命名,更改,我会选择

wikiEntry.AddComments(newComment);

如果wikiEntry以某种方式在内部管理评论,你唯一能做的就是添加新评论,我会选择:

wikiEntry.Comments.Add(newComment);

我永远不会用:

entryManager.AddComment(wikiEntry, newComment);

答案 4 :(得分:0)

所有其他方面都是平等的,我会选择:

wikiEntry.AddComments(newComment);

这似乎是表达你所做事情的最简单,最清晰的方式。我发现最简单的方法通常是最好的。

答案 5 :(得分:0)

我肯定会使用wikiEntry.Comments.Add(newComment)方法。我在下面列出了我的理由。

这很直观,因为它与Microsoft现有控件的工作方式相同,因此您的代码自然就像是代码库的一部分。

它将一件事的功能 - 评论 - 分成了自己的职责范围。在评论集合中,您可以添加,编辑,删除,订购等。这样,如果您希望也能够添加,编辑,删除,订购等参考列表,那么您不会将主命名空间云化,编辑,主持人,历史快照,等等(不是说你想要每个人的集合,很多/大多数你可能不会)

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

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

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