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