内容提要
大二数据库课程项目“12307火车票购票平台”实现了车票查询、中转、预订、余票查询和线路管理,后端采用Flask、前端采用Vue,获得满分。作者借此学习Vue组件化,并与队友远程结对编程。文章还讨论了ORM不宜过度使用,以及中转算法需兼顾换乘次数、等待时间和票价,采用启发式搜索优化。
延伸解读
前端组件化实践
作者首次系统学习Vue框架,将重复元素抽象为组件,例如创建“火车票组件”用于订单页面,使展示更直观。这体现了组件化开发在提升代码复用性和界面一致性方面的价值,尤其适合需要频繁交互的购票平台。
远程结对编程体验
疫情期间,作者与队友通过腾讯会议每晚共享屏幕协作编码,持续约一个月。这种模式强制练习了Git的rebase、fast-forward等技巧,成为敏捷开发中结对编程的雏形,也凸显了选择合适队友的重要性。
ORM的适用边界
作者认为ORM并非银弹。在余票查询等复杂场景中,需关联7-8张表,直接写SQL更清晰;而ORM转换不透明,会增加调试和架构调整的难度。因此,对于表关系复杂的系统,应谨慎评估是否过度使用ORM。
中转算法的多目标优化
中转查询需同时考虑换乘次数、等待时间和票价,属于多目标优化问题,且列车调度频繁变化。作者采用启发式搜索,根据客流量动态增加大站权重,并避免从小站扩展边,以提升搜索速度,最终效果令人满意。
Q&A
12307火车票购票平台是什么项目?
这是大二数据库课程期末项目,实现了车票查询、中转、预订、余票查询和线路管理等功能,后端用Flask,前端用Vue,获得了满分。
这个项目使用了哪些技术栈?
后端采用Flask框架,前端采用Vue框架,并使用ElementUI组件库。
为什么作者不建议在复杂查询中过度使用ORM?
因为ORM翻译不透明,当查询复杂度很高时,维护和调试困难,心智负担远超直接写SQL。例如余票查询需要连接7-8张表,用ORM会变得冗长难维护。
中转算法设计时需要考虑哪些因素?
需要兼顾换乘次数尽量少、换乘等待时间尽量短、票价尽量低,这是一个多目标优化问题,没有最优解。
作者如何优化中转查询算法?
采用启发式搜索,根据客流量动态增加主要枢纽站的权重,并且最短路径算法中不从小站进行边扩展,以提高搜索速度。
项目开发过程中团队是如何协作的?
作者与队友在疫情期间通过腾讯会议每晚共享屏幕结对编程,持续约一个月,并实践了Git的rebase、fast-forward等操作。