iNaturalist:先留下观察,再一起弄清它是什么
iNaturalist 让人记录遇见的动植物,并请社区共同鉴定。照片、时间地点和不同人的判断放在同一份观察里,名字可以逐步明确,分歧也能留下来。
先尝试拆解问题、设计和实现,再展开思路,检查状态、边界与取舍,并设计验证用例。思路提供分析路径,不给出完整实现。
01
代码思考
只统计每个人当前的判断
为一个社区照片整理工具实现“当前判断”模块。同一张照片可能拍于公园A或公园B;每位参与者可以修改或撤回自己的判断。页面需要随时知道两种判断各有几人支持,不能把某人改过的旧意见也算进去。
- 模块初始没有判断。提供提交某人的A或B判断、撤回某人的判断、查询当前统计三种操作。提交会替换这个人之前的判断;撤回不存在的人不改变结果。统计返回 {A:人数,B:人数,total:有效判断人数}。姓名非空、选项保证合法;操作依次发生。查询结果被调用方改写时不能改变模块内部记录。
- 甲选A、乙选A后统计为 {A:2,B:0,total:2};甲改选B后为 {A:1,B:1,total:2};甲再次选B时保持不变;撤回乙后为 {A:0,B:1,total:1};再次撤回乙仍相同。
- 交付可运行的小模块及这些调用结果,简述你把什么保存为事实、什么由它计算出来,以及这种安排怎样避免改票后人数越积越多。只处理一张照片的本地数据。
查看思路
- 先确定一份有效判断由什么标识,考虑把当前判断作为依据,还是同时保存一份需要维护的统计。
- 用甲从A改到B的步骤检查旧支持是否退出,而总人数是否保持两人;比较不同保存方式各要同步哪些变化。
- 再用重复提交、重复撤回和修改查询结果的例子,检查外部操作会不会破坏内部记录。