过年隔离在家,正好看到腾讯云主办的“协力抗疫,码力全开”线上公益黑客马拉松,也希望能为疫情作出一点贡献,就报名参加了。
作品疫程的思路来自之前看到央视新闻公众号推送的一篇文章《我们建群吧》,提出在当前患者不断确诊,患者历史行程持续披露的过程中,乘坐公交、航班、高铁等出行的乘客可以通过微信面对面建群,如果未来万一发生疫情的话,可以及时沟通、交流。
从程序员的角度,建群等到疫情发生时互相提醒太过低效。如果有一个应用可以帮助用户查询患者行程,同时支持订阅行程,在出现疫情时及时通过微信通知用户,这就方便多了。
源码地址
https://github.com/shidenggui/ncov
查询患者行程
订阅界面
订阅提醒
历史通知
因为是腾讯云的活动,所以倡导用户使用小程序 + 云开发的方式开发产品。
小程序本身的即用即走以及订阅通知机制非常适合我的应用场景。
而云开发所倡导的 serverless 也是我一直非常感兴趣和愿意尝试的,正好在这次开发中体验下。
使用 uniapp,基于 Vue 的语法。因为之前开发过几个小程序,都是使用的 uniapp,已经比较熟练,其本身对 Vue 的语法支持非常完善,而且社区完善,相关资料比较丰富。
采用的 tailwindcss。这个框架基于原子类设计思想,奉行 utility-first,是作者多年工程化思考的结晶。之前在好几个产品轻度使用过,因此还读过作者的一本小书《Refactoring UI》,框架整体在开发效率和自定义之间取得 了一个比较好的平衡。
核心思想是通过大量的工具类的组合来表达样式,几乎不需要自定义类名,而疫程这个项目也确实没有起过类名,须知命名是编程第一难题。
示例:行程组件
ncov-travel 组件为上面白色一栏加订阅按钮
ncov-patient-travel 组件为下面的患者行程,包括时间、地点、来源等
使用了 6 个云函数加 1 个定时触发器。优点是基础套餐免费,深度集成微信,自带数据库和定时触发器,非常适合轻量级应用。不过缺点是函数之间不能复用代码,整体代码略显零碎。
示例
获取用户所有订阅
云开发的数据库是微信自研的类似 Mongo 的文档型数据库,目前功能还比较简陋,不过基本还是够用的。
触发器配置
使用跟 crontab 同样的语法
使用领域驱动设计(DDD)。最近一直在看架构方面的书,DDD 感觉是应对软件复杂度比较好的一种架构。
从规划到落地大概花了 24 个小时左右,之后花了一部分时间准备文档和 PPT。第一次参加黑客马拉松,整体体验还不错。最后提交作品的有 35 个团队,其中有些项目挺好玩的。
本来一开始发了朋友圈想找一个产品经理或者设计师一起来玩,不过最后没有找到,只能自己撸袖子上了,一个人的话确实效率很高,就是有些地方可能会思虑不周。
更新于 2020-02-15
感谢大家的支持,最后获三等奖。也算为自己的第一次黑客马拉松之旅画上一个不错的句号。