24 小时开源公益黑客马拉松,开发一款疫情小程序

2/8/2020

缘起

过年隔离在家,正好看到腾讯云主办的“协力抗疫,码力全开”线上公益黑客马拉松,也希望能为疫情作出一点贡献,就报名参加了。

RntDFG

想法来源

作品疫程的思路来自之前看到央视新闻公众号推送的一篇文章《我们建群吧》,提出在当前患者不断确诊,患者历史行程持续披露的过程中,乘坐公交、航班、高铁等出行的乘客可以通过微信面对面建群,如果未来万一发生疫情的话,可以及时沟通、交流。

从程序员的角度,建群等到疫情发生时互相提醒太过低效。如果有一个应用可以帮助用户查询患者行程,同时支持订阅行程,在出现疫情时及时通过微信通知用户,这就方便多了。

结果展示

源码地址

https://github.com/shidenggui/ncov

查询患者行程

  • 点击右上角的按钮订阅对应的行程通知
  • 点击患者行程可以复制来源链接到浏览器中打开

订阅界面

订阅提醒

3.提醒

历史通知

4.历史通知

技术架构

因为是腾讯云的活动,所以倡导用户使用小程序 + 云开发的方式开发产品。

小程序本身的即用即走以及订阅通知机制非常适合我的应用场景。

而云开发所倡导的 serverless 也是我一直非常感兴趣和愿意尝试的,正好在这次开发中体验下。

小程序框架

使用 uniapp,基于 Vue 的语法。因为之前开发过几个小程序,都是使用的 uniapp,已经比较熟练,其本身对 Vue 的语法支持非常完善,而且社区完善,相关资料比较丰富。

cLZPFX

CSS 框架

采用的 tailwindcss。这个框架基于原子类设计思想,奉行 utility-first,是作者多年工程化思考的结晶。之前在好几个产品轻度使用过,因此还读过作者的一本小书《Refactoring UI》,框架整体在开发效率和自定义之间取得 了一个比较好的平衡。

核心思想是通过大量的工具类的组合来表达样式,几乎不需要自定义类名,而疫程这个项目也确实没有起过类名,须知命名是编程第一难题

IfaBIT

示例:行程组件

m4xLb2

ncov-travel 组件为上面白色一栏加订阅按钮

nxPFTp

ncov-patient-travel 组件为下面的患者行程,包括时间、地点、来源等

b4brPs

云开发

使用了 6 个云函数加 1 个定时触发器。优点是基础套餐免费,深度集成微信,自带数据库和定时触发器,非常适合轻量级应用。不过缺点是函数之间不能复用代码,整体代码略显零碎。

mMZSCE

示例

获取用户所有订阅

云开发的数据库是微信自研的类似 Mongo 的文档型数据库,目前功能还比较简陋,不过基本还是够用的。

pHupXU

触发器配置

使用跟 crontab 同样的语法

image-20200208151055554

架构

使用领域驱动设计(DDD)。最近一直在看架构方面的书,DDD 感觉是应对软件复杂度比较好的一种架构。

1rZLCs

后记

从规划到落地大概花了 24 个小时左右,之后花了一部分时间准备文档和 PPT。第一次参加黑客马拉松,整体体验还不错。最后提交作品的有 35 个团队,其中有些项目挺好玩的。

本来一开始发了朋友圈想找一个产品经理或者设计师一起来玩,不过最后没有找到,只能自己撸袖子上了,一个人的话确实效率很高,就是有些地方可能会思虑不周。

更新于 2020-02-15

感谢大家的支持,最后获三等奖。也算为自己的第一次黑客马拉松之旅画上一个不错的句号。

疫程小程序码