我如何构建电影推荐 CLI

发布: (2026年1月18日 GMT+8 03:33)
5 min read
原文: Dev.to

Source: Dev.to

Introduction

我一直对电影情有独钟——尤其是那些符合我当下情绪或我想要的观后感,并且适合我陪伴观看的对象的好电影。寻找合适的影片通常很费劲:我得在不同的提供商、流媒体服务或网站之间切换,一边筛选过滤条件,一边浏览评分和简介。对这种循环感到厌倦后,我写了一个简单的命令行工具,让这个过程更快、更有趣一点。

代码全部使用 Java 编写,因为它用途广泛、拥有强大的面向对象模型,而且是本课程的主要语言。没有使用任何外部库,保持实现尽可能简单,并让每个功能都能“手动”理解,而不是依赖框架。程序被划分为多个类:

  • Main class – 提供命令行界面(CLI)
  • Helper classes – 处理认证和电影数据
  • Testing classes – 确保代码顺利运行

保持模块化让我们可以一次只专注于一个部分,运用了面向对象的标准思想,如关注点分离和封装,便于维护和未来扩展。

从用户的角度来看,工作流故意保持简洁:打开终端,运行工具,收到欢迎信息,登录,回答几个关于情绪和陪伴对象的问题,随后得到一个或多个电影推荐。每个推荐都会显示类型、标题以及简短的描述。

Feature 1: User Input and Validation

CLI 会提示用户输入并进行验证,以确保响应符合预期格式(例如,非空字符串、数值选择在范围内)。无效输入会触发友好的重新提示,防止程序崩溃。

Feature 2: Auth class and file‑based authentication

认证由 Auth 类处理,该类读取一个纯文本文件,文件中每行包含一个 username:password 对。类会把这些凭据加载到对象集合中,并提供方法将用户的登录尝试与存储的数据进行比对。

Feature 3: Questions, preferences and loops

一系列问题对象在循环中被处理。每个答案会映射到一个或多个电影类型。例如,对“平静”氛围的偏好会转化为 dramaromanceslice‑of‑life 等类型。得到的类型列表可能包含重复项(例如 ["Drama", "Action", "Comedy", "Drama"])。这些重复是有意保留的隐式加权机制:某个类型出现得越多,对最终评分的影响就越大。

Feature 4: Movie objects and scoring algorithm

电影由包含标题、简介和关联类型字段的对象表示。用户的偏好被转换为加权类型列表后,程序会根据每部电影的类型与加权列表匹配的数量为其打分。得分更高的电影会优先展示,提供最符合用户情绪和陪伴对象的推荐。

Issues Encountered

  1. Human Input – 处理不可预测的用户响应并确保稳健的验证。
  2. Designing a suitable scoring system – 在不使用外部库的前提下,创建一个既简单又有效的算法。
  3. Constraints without external libraries – 仅使用核心 Java 功能实现认证、测试和 UI。

Conclusion

最终得到的是一个优雅的工具,适合想要快速获得符合当前情境的电影推荐的终端高手。未来的改进可以包括集成 IMDb API,自动获取最新的电影数据,减少对本地电影数据库手动更新的需求。

Back to Blog

相关文章

阅读更多 »