课前热身 | 这些需求给到你,你会怎么写代码?

2020-12-28 郑晔
代码之丑
进入课程

讲述:郑晔

时长02:31大小2.32M

你好,我是郑晔。
我在开篇词中提到,缺乏识别代码坏味道的感觉,这才让很多问题代码堂而皇之地留在了自己的眼皮底下。识别坏味道,单纯学理论是不够的,你得结合具体问题进行分析,所以我才在课程中加入了大量真实的代码案例,帮助你理解坏味道。当然,除此之外,你还要有足够多的练习。
为了让你能够深度地参与到这个专栏的学习中,代码能力得到有效提升,我准备了一个课前热身的环节:大家一起来写代码。
我们要编写一个待办事项管理的软件,你可以看我下面给出的需求,它是以命令行应用的方式存在的。

第一阶段:基本功能

添加 Todo 项。
todo add <item>
1. <item>
Item <itemIndex> added
完成 Todo 项。
todo done <itemIndex>
Item <itemIndex> done.
查看 Todo 列表,缺省情况下,只列出未完成的 Todo 项。
todo list
1. <item1>
2. <item2>
Total: 2 items
使用 all 参数,查看所有的 Todo 项。
todo list --all
1. <item1>
2. <item2>
3. [Done] <item3>
Total: 3 items, 1 item done
要求:
Todo 项存储在本地文件中;
Todo 项索引逐一递增。

第二阶段:支持多用户

用户登录。
todo login -u user
Password:
Login success!
用户退出。
todo logout
Logout success!
要求:
只能看到当前用户的 Todo 列表;
同一个用户的 Todo 项索引逐一递增;
当前用户信息存储在配置文件中 ~/.todo-config。

第三阶段:支持 Todo 列表导入和导出

Todo 列表导出。
todo export > todolist
Todo 列表导入。
todo import -f todolist

第四阶段:支持数据库持久化

在配置文件中,配置数据库连接信息。
初始化数据库。
todo init
要求:
没有数据库的情况下,使用本地文件;
在有数据库的情况下,使用数据库;
在本地文件已经存在的情况,将本地信息导入到数据库中。
以上我给出的是最基本的需求,你可以根据自己的实际编码情况,适当补充一些细节,比如,相应的错误提示。
你可以用自己最熟悉的程序设计语言、按照自己最习惯的方式编写代码,并在 Github 上以公开仓库的方式提交自己的代码,将仓库链接贴在这节课的留言区下,我会顺着链接找到你的仓库,去查看你写的代码。
为了方便代码的阅读,请你按如下要求编写你的代码:
在项目的 README 文件中,写出如何构建和执行你的应用;
需求分成四个阶段,请你按顺序依次完成每个阶段的需求;
每完成一个阶段的代码,创建一个 tag,tag 名称分别为 todo-phase-1、todo-phase-2、todo-phase-3、todo-phase-4。
之所以要把需求分阶段,主要是方便大家参与,即便你时间有限,只写第一个阶段的代码,依然是一个完整的需求。学过《10x 程序员工作法》的同学都知道,任务分解是一个重要的工作原则,分阶段需求其实就是一种需求层面上的任务分解。
在专栏结束之前,我会专门制作一期加餐,点评大家的代码;同时,我也会选出代码写的最整洁的 3 位同学,送出价值149 元的华为智能体脂电子称
欢迎加入这次编码的训练中,期待你在留言区分享你的代码。
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
开篇词 | 这一次,我们从“丑”代码出发
下一篇
01 | 缺乏业务含义的命名:如何精准命名?
 写留言

精选留言(20)

  • 2021-01-12
    前端er来提交代码了😋 完成了前三个阶段
    https://github.com/front-end-captain/todo

    作者回复: 继续加油!

    1
  • 2021-01-02
    第一阶段,草草写完,有些地方还是设计得有问题,后续在优化。
    https://github.com/Jxin-Cai/ugly-code-work-jxin
    展开

    作者回复: 改进慢慢来。

    1
    1
  • 2021-01-24
    https://github.com/tofdragon/todoList
    展开

    作者回复: 欢迎加入代码改进之旅。

  • 2021-01-14
    第一阶段昨天下午工作之余写的,今天上午来交个一阶段的作业,有空了剩下也会继续写的
    https://github.com/kamjin1996/todo-manager
    展开

    作者回复: 加油!

  • 2021-01-13
    第一阶段,all参数,item展示问题。请问老师是不是——总体上未完成的item先于已完成的item展示。未完成item之间按照加入顺序展示,已完成item之间按照完成的顺序展示,是这样吗?

    作者回复: 这是实现细节,都可以,最简单的做法是直接按照顺序展示,不分完成未完成。

  • 2021-01-13
    交作业
    github地址:https://github.com/caitlingao/task_demo
    交付内容包括:四个阶段的代码和每个阶段简单的开发分析设计文档
    最近在学习Rust,所以尝试用Rust完成这次作业,断断续续用了一周多终于完成第一版,在第一版的基础上又重构了一版,这是重构后的第二版。
    展开

    作者回复: 真棒,有 Rust 的版本了!

  • 2021-01-10
    https://github.com/mgxian/todolist
    刚刚写完第一阶段

    作者回复: 一点一点进步

  • 2021-01-07
    我终于可以交作业啦,虽然只是第一阶段,但是居然花了我近20个小时,果然变写代码,菜是原罪啊 ,地址:https://github.com/chenmingchao92/todo-manager

    作者回复: 多好的一个练手的项目啊!可以重写几遍试试。

  • 2021-01-05
    https://github.com/quzehu/todo-command.git
    第一阶段功能完成,Java实现

    作者回复: 继续努力

    2
  • 2021-01-04
    https://github.com/LiuTianyou/todo
    第一阶段完成,以后一边听课 一边改。

    作者回复: 一点一点地提高。

  • 2021-01-03
    https://github.com/bobdeng/todolist todoList的作业

    作者回复: 欢迎加入

  • 2020-12-30
    第一版功能初步完成了,但是很多细节还需重构。
    https://github.com/liudaming/todo

    作者回复: 完成比完美更重要。

    1
  • 2020-12-30
    采用python3编写
    代码支持Linux、Windows环境
    未打包,具体环境搭建及测试说明见README.md
    https://github.com/mukuss/todo-list/tree/main

    作者回复: Python 是 TIOBE 2020 的年度语言,赞!

  • 2020-12-30
    目前完成第一阶段https://github.com/benben773/todomaster/tree/main/todomaster

    作者回复: 不错,继续努力。

  • 2020-12-30
    老师您好,这是我的尝试(golang):
    https://github.com/ht290/todo-cli
    phase 1 已经完成,phase 2 & 3这几天完成。
    展开

    作者回复: 加油!

  • 2020-12-29
    第一阶段搞定
    https://github.com/ynfeng/todo

    作者回复: 加油!

  • 2020-12-29
    第一版,希望结课时能有进步 qszhu/bad-code-todo
    展开

    作者回复: 希望看到你的进步。

  • 2020-12-29
    开始着手第一阶段
    https://github.com/qiuye1pian/todo-list

    作者回复: 加油啊!

    1
  • 2020-12-29
    打个卡,元旦交代码。

    1.阶段二,不提供注册用户的功能,将支持的用户信息全部写在~/.todo-config文件中?
    2.阶段三,导出的是all还是仅未完成,还是可以加指令控制选项?
    展开

    作者回复: 第一个问题,答案是可以。
    第二个问题,导出的是all,相当于数据库的导入导出。你可以自己加命令行参数,做一些控制,如果你时间多的话。

  • 2020-12-28
    先占个沙发,回头写了作业过来补上哈~
    展开

    作者回复: 期待你的作业!可以先完成第一阶段的。

×
拖拽到此处
图片将完成下载