哪些模式可用于网络项目?
我正在使用ASP.NET开发一个wiki项目。在我的结构中,每个wiki条目都可以 评论。
哪种方式最好:
wikiEntry.AddComments(newComment);
wikiEntry.Comments.Add(newComment);
entryManager.AddComment(wikiEntry, newComment);
答案 0 :(得分:3)
wikiEntry.AddComments(newComment);
正确,客户端代码很简单,无需担心内部如何表示注释。
wikiEntry.Comments.Add(newComment);
错误,如果null,客户应该担心评论?没有信息隐藏
entryManager.AddComment(wikiEntry, newComment);
错误,责任错误导致程序代码
答案 1 :(得分:1)
封装暗示1.我会接受它。 (但事实并非如此)。
答案 2 :(得分:1)
除了之前的答案,我只会写第二种方式:
wikiEntry.Comments.Add(newComment);
这种方式并不像其他人说的那么糟糕
所有工作都与通过评论属性完成的评论有关,这很简单直观。
无需为所有者对象的每个新功能添加新方法(如AddComment,RemoveComment,FindComment等)。这样,所有者对象不包含所有内部对象的方法,它更小更干净。有清晰的代码分离。
如果您想查询评论,只需执行此操作,无需向所有者添加特定的FindBySomething方法。
您可以使注释永远不为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);
为您提供了一种表示嵌套注释的简便方法。