引言
准备做个项目实战系列,选一些比较有代表性,难度适中、规模合适的项目,从不同的角度,不同的深度去解析。很多初学者都抱怨没有实战项目,而学校/机构里大量用烂的学生管理、图书管理、电子商城等项目实在没有什么新意。近期因为工作的原因,带了一批大学里的实战项目,通过这次带实战项目,有了一些心得,所以把这次的实战项目整理下来。希望能对初学者们有所帮助。
本系列中不会介绍过多技术的各种用法,更多的是通过介绍一个项目从无到有要经历过的所有工作,很多时候也不会去选择一个非常好用的技术,可能会选择一些比较笨的方法,例如:在
MyBatis
和MyBatisPlus
中选择用MyBatis
,因为我希望初学者把更多的注意力放在解决问题的思路和基本功上,而并不是放在一些工具的炫耀上。当你的基本功用吐的时候才是考虑寻找更方便的工具的时候。核酸检测每个人都经历过,而现在核酸检测是离不来核酸检测平台的,不知道程序员们有没有去思考过这个平台是怎么实现的。
我有兴作为志愿者参与了核酸检测工作,对这个平台有一些了解,这个项目从功能上来说并不复杂,涉及到的数据库表可能连20个都不到,但是业务逻辑却环环相扣。
同时它又涉及到了多个端、多个角色。可以让初学者对多端项目的设计有一些粗浅的概念。
从需求的角度,它不是单纯的增删改查,页面之间往往是有关联关系,做起来不会那么枯燥。
不要求并发的情况下,项目可以很简单,非常适合初学者练手;
考虑并发的情况下,又非常适合来做
redis
、微服务等来做优化,又可以做深度优化。可以说从很多角度来讲,这个项目都是非常好的教学数据。
所以本系列的第一个项目就采用逆向工程的思路来做《核酸检测平台》
完成项目的需求分析
重点:根据可见功能反推出不可见功能
检测项目平台是东软开发的检测平台, 在网上也能查到相关的培训视频,要了解清楚需求还是要认真看一看培训视频。
https://www.bilibili.com/video/av596102734/?vd_source=cd85f68bf727f315e1776859a5694e1f
另外还有一篇公众号文章介绍采集人员APP
https://mp.weixin.qq.com/s/USOiDdhrOy0zxK3WjAH1kQ
这个视频是比较早期的培训视频,目前其实已经升级了,能够支持二维码扫描采集检测人信息,大大提高工作效率。
通过视频可以看到项目涉及到如下几类使用平台的人群(或称之为角色):
APP
完成核酸检测信息采集任务APP
完成转运过程必要的信息采集任务学软件开发的同学都知道做软件要先进行需求分析,但这个项目采用逆向工程的方式开发,部分需求从网上搜索到的资料已经有了,我们只需要把他们整理一下。其中比较重要的就是下面的流程图了。
什么是逆向工程?
这个问题百度一下就有答案,不过理解起来有点费劲,而且听起来这个词高大上,其实通俗的讲,其实就是模仿。没错,逆向工程在很多领域是极不光彩的,往往会被冠以山寨、抄袭这样的词汇,不过在软件行业,逆向工程是学习提升、需求分析的必备技能,一定要掌握。
根据流程图我们可以看的出核酸检测整体的工作流程,作为普通百姓的我们,要证明我们是安全的至少要经过采集人员、转运人员、检测机构这几类人的手。而且动不动来几次全员核酸检测,每一次都要动用大量的人力、物力、财力,如果没有一套可靠的信息系统的话,光信息的上传下达都能把人搞疯。
而整体平台的使用者涉及到的人群还是很大的,不论是采集人员还是转运人员,即有可能是20岁的年轻人,也有可能是50+的大叔、大妈,APP的设计必须要考虑系统使用的便捷性。所以说这个平台功能可能并不复杂,但是必须要做到方便使用。不管怎么说,需求分析还是要把功能清单给列出来的,我们先来看看从资料中可以找到的可见功能吧。
功能清单:是需求分析非常简单有效的方法,有经验的工程师一看功能清单就知道系统的大致结构了。大脑中瞬间就是开发完成(naobu)出整个系统。作为初级工程师,一定要常常练习列功能清单这个方法。
这里说的可见功能指从培训资料、文章,以及下载APP之后,能看到的界面提取出的功能点,大致包含以下内容:
注册:采集人员因为涉及的面非常广,开放了注册功能,方便采集人员注册,并且有志愿者和医护人员的区分。
登录:
选择采集点
扫描箱码开箱
扫描试管码开管
扫描身份证
封管
封箱
修改密码:这个功能虽然流程上没有,但APP
里面是有的
忘记密码
从网上能看到的资料只包含这些内容了,这些只是流程中的第一大块的内容,其它的功能并没有,那我们只能脑补了。
我们看到的流程、功能,只是整个平台的一小部分,而且培训视频中的流程图肯定是不完整的,只展示了和采集人员有关系的部分。这个时候如果要把问题提出来,就要会提问题,很多事情看似理所应当,但其实背后有人在背付,比如说,我们在做核酸的时候采集人员会扫描试管码,还会扫描转运箱码。问题来了:
类似的问题还有:
这样的问题如果你细想去下能想到很多,这些问题如果放到敏捷开发中,就是用户故事,也可以说是平台要解决的问题。
而且有些问题我们不仅仅要考虑系统怎么做,还要结合线下的工作模式,来设计软件系统如何运行,比如说:
经过这些思考和脑补,是可以得出完整的解决方案的,这个方案应该不仅仅包含软件部分,还应该包含线下的工作流程。所以流程图如下:
注意:大家在看流程图的时候也要注意一下旁边的需求说明。
把脑补出的流程总结一下,可以得出如下不可见的功能:
这类人员有可能和接收人员是一类,但考虑到打印条码、上传EXCEL检测结果等功能还是在电脑上使用更好一些,还是独立出这一类人员。
平台不出意外的话应该是一个城市部署一套,那么必然会有一个机构平负责运营、管理整个平台,这个运营方应该是政府某部门负责,从前面几类人员的脑补中其实已经可以推测出运营人员的部分功能了。
很多工程师在需求调研阶段会忽略这方面的需求,功能性的需求决定了搬代码的工作量,但一个项目值钱的工作量往往是由非功能性需求来决定的。比如说:
看到了吗,类似这样的需求随便一条可能就顶得上所有功能性需求开发的工作量。
所以程序员问,如果你将来有幸去做需求调研,一定要做非功能性需求调研。
调研方法嘛,其实很简单,准备一套非功能性需求调研问卷,依次去问就好了,当然在和客户沟通的过程中人家可能会问达到这些需求对应的投入量(时间、资金),你得心里要大概有个数。回头有时间的话我专门写一篇非功能性需求调研问卷的文章,有兴趣的朋友三连不迷路。
对于本项目来说,非功能性的需求我觉得可能会有下面几条:
APP
不能够一卡好几秒,反应必须迅速)APP
端、服务器端都不能轻易崩溃,能够连续运行12小时以上,为什么是12小时,因为核酸检测人员白天工作,你至少要保证在这白天的时间系统正常运行,如果有问题,在核酸采集休息之后来维护系统。(苦逼吗?程序员的加班就是这么来的)APP
依然能够开展工作,待服务器恢复之后自动同步APP
端攒的数据太多,一旦出问题造成大量数据丢失,这个问题非常麻烦)好了,我能想到的可能会有的需求差不多就是这些了。这要求可以说不算低,但是没办法,涉及人员这么多的平台,稳定性、安全性一定是要求非常高的。
不过,我们做为初级练手项目的话,这里面暂时不考虑,或者考虑一小部分。
如果你是一个自由职业者或老板,接到一个项目的时候,肯定要评估一下一个项目的技术难度,来决定报什么价格和工期。所以这一步应该是说比较重要的。
整个项目单从功能的角度来说,没有什么的难点,除了数据库CRUD之外,也就下面几个技术点了:
lodup
。虽然收费,但是拿来做演示程序还是可以的。EasyExcel
。API
接口,也不难。OK整体来看,不考虑并发量、稳定性的情况下,这个项目并没有太难的东西,有难的地方也有相应的第三方组件能够完成。有兴趣的同学,三连我,一起打开核酸检测平台的神秘面纱吧。