添加游客评论功能设计

本来,这个站根本没有朋友来回复(见:停止guest公共帐号,启用公共测试帐号),我又怕麻烦,又想学点东西,近段时间就不打算写网站的程序了。但是,我想,万一有某个朋友有心发表点意见,一看还要注册、登录,结果想在这里留点我认为弥足珍贵的文字也打退堂鼓了。基于“不怕一万,就怕万一”的理论,万一有朋友来访,我们不能拒朋友于门外吧。

1、基本功能:

就是一般博客站的游客回复功能(如http://www.jiehoo.comhttp://www.chinamyhosting.com等),具体为:

1),回复表单在显示帖子内容的下方;

2),字段包括:

名字(必须),邮件(必须),网站(可选),标题(必须,系统自动给出re:....的标题,可以修改),内容(必须);

3),朋友在提交评论后,写入cookie,以后再次访问时不用输入除标题和内容的字段;

2,以上功能在本站实现的要点:

1),回复表单在显示帖子内容的下方:

可以参考上传文件使用的frame结构,为了简化实现,游客回复去掉上传文件功能,但可以使用UBB语法;

2),因为本站已有的数据结构和为了简化实现,所有游客的回复在系统中划为一个游客帐号的帖子;但是,为了显示上述字段,可以把上面的“名字(必须),邮件(必须),网站(可选)”字段加在内容前面,并加入特殊的分隔符,把上述字段连同内容存入数据库;要显示游客的回复的时候,把从数据库中取出的内容字段分离出“名字(必须),邮件(必须),网站(可选)”字段用于显示相关内容。

这样,在取出一篇日记或目标的评论列表,并把它们显示出来的时候,对划归游客帐号的帖子的显示格式有所变化;

3),游客发表的帖子不能被普通用户修改,但管理员可以修改和删除(例如有可能出现的垃圾信息)。

4),因为游客帐号需要保存的cookie信息没有密码,也用不着把游客的相关历史信息存入数据库。

3,具体实现:

1),jsp页面文件:只有一个显示日记或目标内容的页面需要在下部加一个游客留言的frame;

2),java文件:传递游客信息需要增加一个GuestArtInfo.java,一个相应的FormBean:GuestArtForm.java,一个提交游客评论的Action:PostGuestArtAction.java,一个游客每次提交评论成功后的cookie写入方法,可以把这个方法归入到util包,为了高效,单独建一个类CookieManager.java,方法的名字就是writeCookie(Ojbect cookieInfo),然后,在用户以后来访问的时候,有一个读取cookie信息的方法:Object readCookie()也放在CookieManager中,同样。在这里,读了cookie还有一个传入游客评论frame页面的过程,这时,又需要建立一个保持cookie信息的GuestInfo.java

3),为了把游客的评论归入系统的单独一个游客帐户统一管理和简化实现,关健是要把“名字(必须),邮件(必须),网站(可选)”字段以特殊的标记加在内容前面,要显示时再把这些字段分离出来(日记的作者和管理员可以看见这些特殊内容),而且这个过程对用户来说是透明的。

初步设想如下:

存入数据库格式:


[guest]

 [name]

   littlebat

 [/name]

 [gemail]

   mdx-xx@tom.com

 [/gemail]

 [site]

   http://java.learndiary.com

 [/site]

[/quest]

评论内容

分离数据方式:

用正则表达式分离[guest]和[/guest]之间的内容,再用正则表达式把各个字段分离出来封装进上面保持游客cookie信息的GuestInfo.java类中。这个类的对象传入显示页面再读出来进行显示。

游客评论的显示格式为:标题  <a href=游客网站>游客名字</a> 发表时间

4、实现步骤:

1),依次完成GuestArtInfo.java,GuestInfo.java,CookieManager.java,GuestArtForm.java,PostGuestArtAction.java

2),完成jsp页面

3),测试和发布

5、时间:

想做就做,做完为止。

学习日记网站新导航系统设想

1年前冒失的搞一个Struts动态导航系统,现在看来是一个错误的设计。这里把新的导航系统的大概构思理一下。

1、需要导航的页面:

1)显示目标内容的页面:

如“ 学习日记开发小组需求分析设计区”。需要:首页,目标下的所有日记列表,目标下的我的日记列表,按当前选定排序的“上一目标”和“下一目标”;写作目标下的日记,评论目标,修改目标的评论,修改目标内容。这里,写作目标下的日记完成后,如果选择查看日记,系统就进入了日记内容的导航,目标页面的导航条目消失;评论目标,修改目标的评论,修改目标内容,这3个都是直接返回的目标内容页面,仍然是目标的导航条;

2)显示目标下的所有日记列表:

如: 学习日记开发小组需求分析设计区的相关日记 。需要:首页,所在目标,目标下的我的日记列表,按当前选定排序的“上一目标”和“下一目标”的日记列表;还有写作日记的导航,作目标下的日记完成后,如果选择查看日记,系统就进入了日记内容的导航,目标页面的导航条目消失;

3)显示目标下的我的日记列表:

如: 学习日记开发小组需求分析设计区的我的相关日记。需要:首页,所在目标,目标下的所有日记列表,按当前选定排序的“上一目标”和“下一目标”的我的日记列表;还有写作此目标下的日记的导航类上;

4)显示日记的内容:

如:学习日记网站新导航系统设想。需要:首页,所在目标,所在目标下的所有日记列表,所在目标下的我的日记列表,写作所在目标下的日记,修改日记,添加日记的评论,修改日记的评论。其中修改日记,添加日记的评论,修改日记的评论完成后会回到显示日记的页面。另外,还有按当前选定的日记排序方式的同在一个目标的上一篇日记和下一篇日记。为了提供一个日记页面导航的一致性,减少复杂度,就不要提供所在目标的我的日记列表的上一篇和下一篇日记了。

2、设计方法:

1)原来导航系统里可以利用的方法就利用,如果改动较大就重写;

2)重写的部分要注意一个问题,不要在java文件里写生成页面的html元素的代码,这个错误是我前几天看一篇好像是jsp编码规范之类的文章看见的,大概意思是java文件和jsp文件的功能要尽量分开;

3)生成的导航系统的各种导航条目不要集成在一起,一个一个的分散开来,到时可以任意组合和修改。而且要考虑有可能进行的页面美化操作和导航部分代码不要发生冲突。

3、时间:

星期天之前完成并上线运行。因为我始终没有想好这次动态导航部分代码的剔除怎样在版本控制中进行,这些代码的改动暂时不提交到cvs库。或许,可以把剔除原来动态导航之前的代码作成一个release?当然,这个release是不能见人的,初学者也不能看,看了要中毒,只能自己收藏。

学习日记的目标分组功能和Top10日记分类功能设计

根据思路: 明确网站定位,增加学习日记目标分组功能 ,现对学习日记的目标分组功能和Top10日记分类功能进行设计描述。

1、目标分组的建立应该由网站的管理员进行,应该包括下列功能:

1)、创建分组;2)删除分组;3)修改分组;4)分组有优先级别,也可以修改优先级别;

分组的数据表结构:

分组ID(groupID), 分组名称(groupName),分组描述(groupDetail),分组优先级(groupPriority),分组目标数(groupGoalsNum),分组创建日期(createDate),分组修改日期(modifyDate)。以后,还可以添加分组组长的分类组织者;

为了简化实现,初步可以只有创建功能,只要3个必要字段:groupID, groupName, groupPriority。分组的排列以groupPrior为准。

然后,在目标帖子的表中添加一个字段(groupID),因为目标帖子有一个parentID是没有意义的,看是否可以把这个字段来作为groupID;

这样,需要管理员对目标帖子有编辑权限,可以把原来的目标帖子归入分组,没有归入的加入未分类分组。

2、TOP10日记功能:

1)、最新10篇日记,最热门的10篇日记,随机的10篇日记,这些可以通过数据库查询实现。

其中,前两个可以通过那个只返回ID和名称的好像叫getCPageList()的方法来实现;后面的那个可能需要新加一个方法,来返回随机10篇帖子的ID和名称。

3、实现以上功能需要严格测试是否会暴露私人帖子。人的隐私权(人权)优先嘛。

4、由于以上改动,目标内容页面也需要精心设计,把目标相关的内容都要一目了然的呈现给用户,这个页面的广告位设计也要好好考虑一下。

能够想到的都写上了。没有想到的希望看见这篇帖子的朋友提一下。

原来的列表式目标可以作为另一个老的视图保留。

改写登录模块的argouml建模

这不是UML的真正应用,我对UML略知一二,下面我只是借用其中的一些东西表示自己的思路而已。我好像已经习惯于在画图的过程中理清自己的思路了。

1、功能:

1)、登录;2)注销



2、登录:

1)通过登录对话框登录



2)通过cookie自动登录

3)注销

3、类图

1)、登录实现类(包括手动登录和自动登录),里面的excute()方法活动图:

2)、注销实现类,里面的excute()方法活动图:

3)、显示帖子内容的实现类,其中会用到登录,里面的excute()方法活动图:

4、代码改动:

1)jsp页面:

(1)、在登录页面添加一个记住密码的检查框;

(2)、游客用户在添加内容的页面、你的目标、添加新目标、记下学习日记、帐号管理的链接失效,综合RSS订阅中涉及单独用户的链接失效(但是不去掉相应的链接文字,表示注册用户可以有这些功能,游客没有)

2)java文件修改:

(1)、除了LoginAction.java、 LogoutAction.java作相应的修改外,其它的java文件的修改要注意:

<1>、游客登录在UserDB.java的UserDB:

checkUser(in ifGuest : int,in aUserName : String,in aPsd : String) : UserInfo中构造一个UserInfo;

<2>、在UserDB.java中添加一个在cookie上检查用户的方法:

checkUser(in aUserName : String,in aPsd : String) : UserInfo

<3>、游客用户不能进入的action在相应的文件中加上验证;

5、argoUML0.18.1模型:

1)、第一版:附件:loginV0.1.zip,包括含反向工程所需要的classpath内容的argo.user.properties文件,314827 bytes

2)、第二版:附件:loginV0.2.zargo,335268 bytes

开始构思学习日记的BLOG视图设计

我已经在学习日记的开源社区的问题跟踪系统提交这个任务20,简述如下:


现在我们程序展现的仅是一个BBS视图。我认为,一个目标,首先是个人的目标,然后才是大家的共同

目标。

  所以,创建学习日记的BLOG视图。BLOG中的一个分类也是一个BBS中的论坛版块。我想,这个工作需

要一些时间来做。它将采用ArgoUML来设计。

这个想法起源于一位网友javar的建议:http://www.learndiary.com/disGoalContentAction.do?goalID=1287

已经完成的添加私人目标和日记的支持也来自他的建议。http://www.learndiary.com/disDiaryContentAction.do?goalID=2086

添加私人日记支持的需求分析

根据javar的建议和“issue 17”,特提出如下需求分析:

1、征对目标、评论、日记,都可以添加私人帖子属性;

2、如果父类的属性是私人的,那么子类帖也相应成了私人的;

3、子类帖可以单独设为私人的;

4、私人帖和公共帖可以相互转换;如果原来的公共帖成了私有帖,那么其下的子帖也将成为私有,但如果子帖是别人写的又怎么办呢?

5、目标的状态设定后暂时不支持状态转换;

6、RSS订阅一律不计算私人帖;

7、帖子数目的计算要计算私人帖;

8、除非不可抗力(如黑客入侵等等)和司法请求,私人帖为作者的隐私,网站要绝对的维护作者的隐私权。

详细分析:

1、对象模型:ArticleInfo需要增加一个字段visibility(可见性):0为public,1为privated,以后可以考虑增加2为friend,而且为必须字段(不过对于留言是没有意义的);

2、创建目标时,如果选择可见性为privated,则目标下的评论、日记、日记的评论的可见性均为privated;而且,日记不能编辑为public,除非把日记的目标改变,而且,就算目标改变为public,它下面的评论除非作者编辑,仍然是privated;已经成为public的目标不能修改为privated,因为其他用户可能加入了这个目标;已经为privated的目标也不能修改为public,但可以通过把它下面的日记等子帖修改为public而与人共享其中的子帖;

3、创建日记和目标的评论时,其默认可见性继承于目标,如果目标为privated,则它们必须为privated,且没有选择的项;如果目标为public,可以有选择项使它为privated,但默认值是public。

4、在评论日记时,如果日记为privated,则为privated,且无选择项(这种情况实际上是自己评论自己的私有日记,别人是不可能看到你的私人日记的);如果日记为public,可以有选项使其为privated,评论别人的public的日记,但是把评论设为私人的,则原作者也看不见评论,但是如果原作者把日记改为私有了,则谁也看不见评论了;

现在写日记不大方便,应该使这个主要的功能变方便

  例如:在菜单栏中加入写作日记的项目,用户写日记时可以直接在一个下拉列表中选择日记所属的目标;

  在目标的内容显示页和目标的日记列表上部均加入写日记的链接,用户在这个目标下提交了日记即表示加入了这个目标。

  另外,现在是提倡个性的时代,有必要实现BLOG的界面形式,但核心思想-以目标为导向,大家共享目标和实现目标的过程这一核心思想不能变,还应该进一步的发展和发挥这个思想。

应该加入给注册用户发系统公告的功能

  学习日记发新版了,却不能通知在学习日记注册的朋友们,看来应该考虑怎么样把通告发给朋友们。

  1、一个简单的办法是把公告这条目标都加为用户的订阅目标。这样每发一个公告,就当作一个目标下日记更新发给用户了。但是,这样一次连续的发几百上千个公告,虚拟空间的服务器支持吗?发送邮件的邮件服务器支持吗?怎么样确保公告都成功的发给了每个注册用户呢?

  征对前一个问题,我可以问一下虚拟空间的提供商;后一个问题可以看邮件服务器的资料。

  2、另一个方法是专门写一个发消息给所有注册用户的action,这样就可以灵活的处理上面有可能的问题。

  但是,如果第一种方法能满足我的需要,我又何必去费心写多余的代码呢:)