任务管理工具大家用的比较多,比如滴答清单,奇妙清单等,但是如果让我们自己设计并开发一款任务清单,那么应该怎么做呢?先上图.本文以笔者开发的天天任务清单为例来说明该问题。

一、需求设计

一般来说,一款任务管理工具包括如下几点需求

1、能够支持快速地发布任务。发布任务只需要填写一段文字就可以了

2、能够发布比较复杂的任务。比较复杂的任务包括任务截止时间设置,任务优先级设置等等,一些任务还需要每天自动生成。

3、任务需要分类,便于查看,该需求主要考虑到工作和生活相分离。

4、已经完成了的任务要和尚未完成的任务有所区分

5、任务需要支持账户同步功能,即同一个帐号,登录后数据应该保持一致。

6、系统登录尽量简单快接。

二、概要设计

1、系统前端采用框架

可以备用的方案有app,小程序,微信公众号+h5,考虑开发成本和用户体验,我们觉得可以用小程序来解决,主要原因是因为小程序相比H5体验更好,相比app无需安装。

2、系统后端支持

后端语言可以采用php,java或者go,数据库可以选用mysql 或者sqllite。在本系统中,我们将用go做系统开发语言。因为go支持自定义cron定时器,而又相比与java轻巧很多。

3、数据如何同步

本系统我们设计了本地存储和网络存储共存的形式。系统提供手动或者自动同步功能,将本地的数据与服务器上的数据同步。

三、详细设计

1、数据库结构设计

在本系统中我们提供三张表,包括用户信息表t_user,任务信息表t_task,定时任务表t_schedule,任务分类表t_cate.具体表结构如下

t_user :

用户编号id,用户名username,用户密码passwd,用户昵称nickname,用户头像avatar,用户登录凭证ticket。

t_task

任务编号id,任务内容memo,任务优先级pri,任务截止时间deadline,任务状态stat,所属用户userid。

t_schedule

任务编号id,任务内容memo,任务优先级pri,任务截止时间deadline,任务状态stat,所属用户userid,任务产生cron表达式cron,

t_cate.

分类编号id,分类名称name,所属用户userid,面板状态stat

2、定时任务实现

我们采用cron表达式形式,后端采用go语言的好处也在这里,go语言本身可以编译成服务器,无需宿主程序,我们可以通过自定义cron表达式来支持定时任务,而php则不行。

3、前端小程序编码

我们需要将常用的工具函数封装到util包中,并注入到app上下文。另外我们需要将任务管理相关函数封装成js

四、编码

目前该程序已经开源,

具体前端代码地址

http://www.imwinlion.com/archives/category/opensource

后端代码地址正在整理

五、测试

如有bug请联系我

作者简介:胡文林,持续创业者,长期从事技术开源工作。微信号jiepool-winlion