您的位置:首页 > 其它

2016实训项目--仿知乎论坛 总结

2016-12-25 15:41 399 查看
1.项目介绍

以知乎网站为原型设计制作。

开发环境:Eclipse neon, mySQL, Tomcat7.0, JDK1.8, DW5, FireFox.

PS:选题还是相当可以的,根据团队目前的技术水平,无法挑战一些功能复杂的大型网站,应对这种类似论坛的网站没有问题,容易为组员建立信心和成就感。

这个开发环境就有点问题了,因为版本都过高了,由此带来的坏处有:其他组员必须安装高版本才能正确地运行初始项目;版本不兼容导致的出错情况,非常难排错纠正,最快的办法还是装高版本软件;对硬件的条件高了,有些机器运行高版本软件速度相当慢;其实还有一个潜在风险,那就是高版本通常不太稳定。

所以,下次开发时还是用tomcat7.0, jdk1.6,尤其是IDE不要用neon版了,用个更低版本的。

2.需求分析

基于知乎的功能进行了适当删减。

主体分5个模块:用户模块,问题模块,回答模块,评论模块,收藏夹模块。团队共五人,每人负责一个模块。

具体的用例图和用例分析在附件中。

PS:有了网站原型,需求设计难度降低很多。

需求分析阶段,很必要的一个工作是 画用例图和写用例规约。这有助于分析每个功能点的参与者,活动,输入,输出,涉及的数据等。我们写的还相当不规范,有些词语用得模糊不清,图也不够清晰。

在开始一个项目之前,可以在网上找一个原型借鉴一下,这样可以加快分析效率。

3.概要设计

找了一个前台模版,这个模版代码还比较清晰,结构也比较完整。我首先把主页给改了,主要是导航栏,这里确定了你的网站有什么核心内容。

PS: 模版一般都有个缺点,那就是没有把 公共部分的头部和底部分离开,如果一开始不分离好,直接拿来用的话,导致相当多的重复代码,假设导航栏某一列要改动,那么每一个页面都要改,相当繁琐。

所以,模版下下来后,先分离头部尾部,根据需要去除一些页面元素,根据需要改一改。漂亮清爽的页面出来以后更有动力实现功能!

4.详细设计

4.1 数据库设计详情,可在附件中查看。

在设计数据库的时候有一个很有意思的地方,评论分两种,一种是直接对回答的评论(一级评论),另外一种是回复他人的一条评论(二级评论),这两种评论怎么存?是放一张表里面,还是分开来放?

我们一开始设想的是,像QQ空间那样显示,但是发现理不清关系。后来发现知乎的做法简直是简单粗暴,所有关于这条回答的评论(无论是一级还是二级)全部按时间排序显示,如果是二级评论显示 A 回复 B:*,如果是一级则是 A :*,如图:



所以可以把这两种评论完美的做在一张表里面,用户toUser字段来做区分,如果toUser字段不是空,那么肯定是一条二级评论了。

设计数据库方面,老师还给了几个tips。首先,不要为字段设置那么多规矩了,比如字段大小范围,外键指定等,保证主外键不为空就行了,其他控制应该由程序来做,让数据库做开销太大了。其次,有一个工具叫SysBase 在花好数据库设计图后可自动生成数据库报告,我暂时还没有用,希望下次可以用上。

4.2 接口设计

通俗的来说,这里是写dao和daoimpl. 把直接与数据库打交道的部分(本次基本上是CRUD)写好,并且要测试好。

5.项目实施

5.1 Git使用

基础教程:廖雪峰http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

多个人开发同一个项目的一种模式:

1.原作者建立一个git仓(设名字为ZhiLiao),将项目放在仓下。

2.合作者进入原作者主页,进入ZhiLiao仓,点击fork,复制一份到自己的账号下。

3.合作者使用Eclipse Egit 插件可以快捷地从自己的账号下将项目导入到本地eclipse. 在本地修改后,commite,push到远程,然后再向原作者发起一个pull request,并说明修改的地方。

4.原作者在github上收到了 pull request,经查看,若没问题,则接受,并合并。如果有问题,可拒绝。

5.合作者远程仓 与 原作者仓 保持同步:https://help.github.com/articles/syncing-a-fork/

6.分支: 一般,master分支代表一个稳定版本, dev分支代表当前正在发展的。你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

7.冲突:需要手动解决,因为有多个人同时修改了同一个文件,提交的时候系统不知道该接受谁的修改。解决方案许多博客都有讲。其实我也没搞太清楚~

PS:使用Git 对网速要求高,如果网速很渣,不仅不能提高效率可能还会拉低团队信心。比如我们这一次就使用失败了,不过还是体会到了使用这个工具的好处,尤其是开发后期进行整合的时候,版本升级了,总是拿U盘拷来拷去的,心很累。

5.2 实现功能点



这次用的就是很传统的MVC结构,没有使用什么高端框架,甚至连service层都没有。好处就是很流程很清晰容易理解,没有什么很复杂的配置,调错容易;坏处就是代码很冗余,条理不清晰,接受参数,验证,核心业务,提示,跳转,全部由 servlet的一个方法承担了,有点乱。

我猜想有一种做法是,bean里面只写几个关键字段,service里的bean继承基础bean。同理,查询是采用多态的做法,但是遇到参数也完全一样的时候该怎么做?

5.2.1 写回答

这里主要是用了一个百度的富文本编辑器,很好很强大。

http://ueditor.baidu.com/website/

实用性和易用性都很强,不过据师弟说兼容性不好,有些浏览器不能使用。

我觉得可以优化的地方:

在查看回答的页面底部就可以写回答,如果需要全屏写可以点击一个按钮进入全屏模式;

做一个线上草稿箱,有网络的情况下可以取出来;

5.2.2 删除回答

如果这条回答被删掉了,那么所有关于这条回答的评论都应该被删掉。但此处理应要有事务控制的。

5.2.3 查看回答

问题详情页,加载该问题的回答,可以不在问题的servlet里面写吗?

由此引申到,前后台传值,页面间传值有没有更好的方式?

在这个项目中,从页面取值几乎全部都是用request.getParameter, 后台向前台传值几乎都是用request 和 session。

许多列表页面都应该加上分页的,我觉得知乎那种加载方式有些像安卓的风格,很简洁实用,不过可能只适合这种类型的项目。

5.2.4 改回答

回显的时候总是会先出现一点HTML代码,再出现文字,我想应该是插件的问题。用插件是很好很方便,但是看不懂人家的代码很头痛,出了问题根本没法调,做二次开发也麻烦。

5.2.5 计算回答数 与 评论数

有两种方案可以实现,一种是直接设置一个表字段,每次有新回答时便把该字段+1;另一种是需要数目时调用一个方法来计算一下;咨询老师后,老师建议采用第二种方法。

5.2.6 添加收藏

如果用layer弹出用户的收藏夹让用户选择,效果肯定很棒,但是这个数据交互怎么做?子窗口需要获取收藏夹列表,父窗口要获取用户勾选的收藏夹,并发送servlet请求。

5.2.7 没来的及做的

1)点赞

看似很简单,但是有一个问题,那就是点过赞的人 需要 标记,第二次点的时候 就是取消赞了,这个怎么做?

2) 消息推送

如果有消息推送,那么,关注问题,关注某个用户都可以做了。消息推送暂时还不知道怎么实现,我估计是要用socket吧 ,最终目标是当用户成功登陆时可以收到 他关注的内容的新动态。

3) 全文搜索

应该是有直接可用的全文搜索引擎;autocomplete插件可以用上实现自动补全,用这个的话要使用js,ajax了。

4)话题

知乎的话题是用数据挖掘之类的东西整出来的么?有一定的问题量之后,再以此作为数据源进行数据分析,整理关键词作为话题,然后分类?

5)丰富数据量页面展示

知乎的个人主页页面,通过选项卡 可以看当前用户的 回答,提问,收藏,关注等等,哪怕有分页 一次要加载的数据量也很大,应该有一种优化的方法,可以分割数据。

6)分享

分享到其他社交平台该如何实现?可以免费使用吗?

7)部署到云平台,可以外网访问

6.一点感受

首先,团队合作方面,分工要明确,要给予队员激励,鼓励,技术支持,和压力,团队成员需要多交流,最好的是每天开一个短会,报告工作进展,交流遇到的问题,商讨解决方案;其次,技术方面,数据库字段一旦确定下来,不要随便改,尤其是字段名,一开始就要确定好,漂亮的前台,人性化的交互真的很重要,因为这决定了别人对该系统的第一印象;再次,项目管理方面,代码加上规范的注释,对后边理解代码很有帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: