寒假任务“博客引擎”拆分里程碑

视频展示: https://www.jianguoyun.com/p/Dc6WQSgQiuaHBhiOqiU

视频中展示的博客引擎程序,对于大部分同学来说,在技术能力以及功能复杂度的把握上都存在着很大的挑战。如果在一开始就按照最终的样子来做,我想对于很多同学来说,最后可能会陷入混乱,花费了很多时间,但是什么也没有做出来。

所以我们要对功能进行拆分,按照自己所理解的功能的重要性,拆分成多个里程碑,每个里程碑有自己的技术或者功能上的重点。然后在每个里程碑,只做好这个里程碑该做的事情,把它完全实现好以后,再考虑下一个里程碑的功能。

这样带来的好处是:

  1. 我们每个里程碑所需要考虑的问题变小,易于分析、思考和掌控
  2. 每个里程碑要学习的东西比较集中,不会迷失
  3. 每个里程碑结束,有一个完整可用的产品,能够产生价值,也能够给自己带来成就感
  4. 如果在假期中时间或者精力不够了,可以放弃后面的里程碑,至少可以做出功能较少但是可用的东西出来,而不是一个很大但是没法使用的半成品

带来的问题是:

  1. 为了保证每个里程碑功能的完整,有时候需要在过程中添加一些额外的功能,而这些功能在最后可能会被丢弃,有额外的工作量
  2. 新的里程碑的功能可能会在之前的功能上修改,如何保证之前的功能不被破坏,需要一定的技巧

但是这些问题实际上都是在现实工作中经常会遇到的,如何处理好这些问题也正是我们需要学习的,所以我觉得这些并不是问题。

下面我将分析这个程序,并且给出我的里程碑。

程序功能分析

视频中给出的博客引擎是一个“多用户博客引擎”,它具有以下功能:

  1. 用户功能:用户可以注册、登录、退出系统
  2. 发布博客:用户可以创建、修改、查看、删除自己的博客
  3. 评论功能:任何人都可以对博客进行评论
  4. 标签功能(不做):用户在创建博客时可以指定一个或者多个标签,方便对博客归类
  5. 管理员功能:管理员拥有比普通用户更高的权限,可以管理所有用户以及他们的博客、标签等,还可以把某个用户设为管理员

注意,由于“标签功能”在需求上有点不太清楚,我们就不做了,忽略它的存在吧。

我觉得对同学们来说,做这个任务主要是为了促进学习。考虑到大家在做的过程中需要不断学习,所以我会结合功能复杂度和技术难度来拆分里程碑。


第1个里程碑:搭架子

第一个里程碑主要是把项目的架子搭起来,方便我们后面的开发。

  • 先考虑你打算采用什么样的技术栈,Java的还是JavaScript,具体的库和框架用到了哪些,如果是JavaScript的话是否支持ES6
  • 然后是构建工具(比如Java的话我们通常使用Maven,JavaScript的话可以使用npm),你如何做到运行一条命令就编译了代码或者把服务器运行起来
  • 然后是我们的代码提交到哪里,比如github上
  • 在README中向别人说明拿到你的代码之后,如何能在自己的电脑上快速把代码运行起来,看到效果

在这一步,你不需要考虑实现任何功能,可能只需要输出一个简单的页面(上面写着hello world就可以了),用来证明你的项目已经搭建好。

这一步的重点在于,你能够把项目的架子搭起来,能够保证以后遇到问题的时候和需要跟人交流的时候,能够方便地让别人看到你的代码或者效果。

验收条件:

  1. 其他人可以方便的获取你的代码
  2. 其他人可以通过你的说明文件,在本地将服务器快速的运行起来,看到页面
  3. 通过简单的页面可以证明你使用的技术栈和主要的库等已经配置正确
  4. 若干篇博客用来记录你的学习收获和疑问

第2个里程碑:博客的增删改查

这个里程碑主要是为了让我们快速上手,实现一些基本的最重要的的功能:“博客的增删改查”。其它的功能(比如用户注册、登录等),可以放在以后。

在这一步,我们可以这样考虑这样一种使用场景:实验室内部的同学需要一个可以写博客的系统用于分享知识。由于我们可以通过物理方式保证只有实验室内部同学才能访问这个系统,不需要考虑恶意用户,所以我们可以把它设计得非常简单。不需要用户系统,不需要权限控制,每个人都可以直接在这个系统上进行博客的增删改查,只要在修改和删除时小心一些就可以了。

验收条件:

  1. 任何人都可以添加、删除、修改、查看任何博客
  2. 创建博客时,只需要填写“标题”、“内容”、“创建人”并记录“创建时间”即可
  3. 修改博客时,只需要填写“修改人”,“修改时间”即可
  4. 删除博客时,要向用户发出确认,防止误操作
  5. 可以以列表形式查看当前所有博客
  6. 代码以“小步”方式提交到github上,并且每个commit都有清楚的描述
  7. 若干篇博客用来记录你的学习收获和疑问

注意:

  1. 暂不用提供用户相关功能(如注册、登录等),以及评论、标签等功能
  2. 由于没有用户功能,所以在创建和修改博客时,需要手动提供“创建人”和“修改人”姓名
  3. 如果一篇博客多次修改,“修改人”和“修改时间”记录的是最后一次
  4. 不需要记录每次修改的内容,直接保存最后的修改即可
  5. 删除博客时,直接从系统中删除
  6. 这一步不需要使用真实数据库,可以把数据直接保存在内存中某个变量,或者一个JSON文件里

第3个里程碑:使用真实数据库

使用真实的数据库(比如mongodb或者mysql等)来替换前一个里程碑中的模拟数据库。之所以把它单独拿出来,是因为从技术角度上讲,还是有一定的难度,比如数据初始化、异常处理等

验收条件:

  1. 前一个里程碑的功能没有被破坏
  2. 可以通过某种方式来初始化数据库结构和预置数据,并在README中说明步骤
  3. 代码以“小步”方式提交到github上,并且每个commit都有清楚的描述
  4. 若干篇博客用来记录你的学习收获和疑问

第4个里程碑:用户登录

在这个里程碑,我们将增加一个重要的功能:用户的注册、登录、退出。这个功能几乎在每个网站中都会用到,非常重要,所以我们尽快实现它。

在这个里程碑中,我们只考虑一种用户“普通用户”(“管理员”放在后面的里程碑)。

验收条件

  1. 查看博客时不需要登录
  2. 只有注册成用户并登录后,才能创建、修改、删除自己的博客
  3. 用户不能修改或删除别人的博客
  4. 如果没有登录,则不允许访问“创建、修改、删除”等页面
  5. 注册用户时,需要提供以下数据 “用户名”,“密码”。其ID由数据库或代码自动生成,每个用户的ID都是唯一并且不变的
  6. 用户登录时,需要输入“用户名”和“密码”
  7. 用户登录后,可以退出
  8. 用户可以修改自己的用户名和密码
  9. 创建或修改博客时,不需要再手动输入“创建人”和“修改人”,而是由系统自动拿到当前用户的ID并使用该ID

注意点

  1. 这个里程碑只有一种用户“普通用户”,没有“管理员”,所以没有人可以修改或删除别人的博客
  2. 原有的数据库结构需要修改。之前保存的是手动输入的“创建人”或“修改人”姓名,而现在应该使用登录者的ID。当需要显示其用户名时,可以通过ID拿到其用户名

第5个里程碑:博客评论

对于每一篇博客,每个人都可以增加评论。为了简化需求,在评论时,不论用户是否登录,都要求输入用户名,一视同仁。

验收条件

  1. 查看每一篇博客时,都可以看到已有的评论,并按某种时间顺序排列
  2. 查看每一篇博客时,都可以看到一个输入框输入新的评论,包括“姓名”和“内容”,可以提交新的评论
  3. 评论一旦添加,则不可以修改或删除(在后面可以添加该功能)

第6个里程碑:管理员

现在我们可以添加一个新的用户角色“管理员”。它跟“普通用户”的区别在于,它可以对所有的注册用户、所有博客、评论进行增删改查等操作,还可以把别的用户设置为管理员。

验收条件

  1. 管理员登录后与普通用户看到的界面有所不同,多了“所有用户”、“所有博客”、“所有评论”的管理功能
  2. 管理员可以对“所有用户”、“所有博客”、“所有评论”进行增删改查
  3. 管理员可以将某个用户设置为“管理员”,也可以将某个“管理员”设置为“普通用户”
  4. 管理员不能删除自己,或者把自己降为“普通用户”

注意

  1. 第一个管理员直接在数据库中预先提供

第7个里程碑:管理员增加搜索功能

当管理员管理用户、博客和评论时,可以搜索,以方便管理

验收条件

  1. 管理员在管理用户时,可以使用输入的关键字模糊搜索“用户名”,并只显示符合条件的用户
  2. 对于博客,只搜索“标题”
  3. 对于评论,只搜索评论“内容”

注意

  1. 不需要提供分页功能

你的里程碑是什么样的?

在动手之前思考里程碑是一件很费时的事情(我花了三个小时左右才把这些理清楚),但是它也是非常值得的,因为我还没有开始做,但是在脑海中应该对于这个任务有了一个整体的认识。

你是否可以结合自己的情况,列出适合自己的里程碑?在大家动手之前,希望大家能花上一整天的时间,用于思考你的里程碑,把它写出来。不写出来有很多问题是想不清楚的。

当然,如果没有什么想法的话,也可以按照这里的里程碑来。

如果大家还有什么问题,请在评论中提出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容