HarmonyOS 应用开发《掌上英语》第69篇:从备考模板到英语学习——代码复用与改造实战案例
从备考模板到英语学习——代码复用与改造实战案例

一、项目演进背景
本项目最初是一个"备考"模板应用(如建造师考试、职业资格考试),后被改造为英语学习 App。这种改造在软件工程中非常典型——利用已有的代码基础,通过复用、替换、新增和删除,快速构建一个全新的垂直应用。
从备考到英语学习的改造,本质上是一次领域驱动的大重构。两个领域虽然不同,但它们的软件架构有很多相通之处:都需要用户登录、内容浏览、答题练习、学习记录、个人中心等功能。
二、可复用的功能模块
1. 登录模块(login_info)
备考模板的用户登录功能直接适用于英语学习。用户注册、手机号登录、第三方登录(微信/支付宝)的逻辑无需改动。
- 复用的原因:无论考什么、学什么,用户认证的需求完全一致
- 改动量:几乎没有——只需修改登录页面的文案描述
2. 搜索模块(search + search_question)
搜索功能从"搜索备考题目"改为"搜索英语单词/课程"。底层的搜索逻辑、结果展示、分页机制完全共通。
- 复用的原因:搜索的核心是"输入关键词-检索-展示结果"
- 改动量:调整搜索结果的展示模板,适配单词而非题目
3. 答题模块(answer_questions)
备考的答题功能是复用率最高的模块。选择题(单选/多选)、判断题、填空题的做题逻辑在英语学习中也完全适用。
- 复用的原因:做题的交互模式一致——查看题目、选择答案、提交、查看解析
- 改动量:题目数据结构微调,适配英语题型(如音标题、拼写题)
4. 个人中心(minePage)
用户信息维护、设置页面、学习记录列表、消息中心等,与学习内容无关,完全复用。
5. 基础组件(commonLib)
RouterMap、PreferenceUtil、Logger、AudioPlayer 等基础设施完全不需要修改。
三、需要替换的内容
1. 课程内容(Course → Word)
备考模板中的课程数据全部替换为英语学习数据:
// 备考模板的课程模型
export class Course {
name: string;
chapters: Chapter[];
examDate: string;
}
// 替换为英语学习的单词模型
@ObservedV2
export class WordCard {
@Trace word: string;
@Trace phonetic: string;
@Trace translation: string;
@Trace example: string;
}
数据源从 500 个 CET/GRE 单词替代了原本的考试题目数据。DEFAULT_WORD_CARDS 提供了 500 个示例单词,分为基础、CET-4、CET-6、雅思和 GRE 五个等级。
2. 首页内容(HomePage)
首页的今日学习卡、轮播图、功能栏、练习模式保留了布局结构,但内容从"备考课程"替换为"英语学习":
// 功能栏图标替换
@Local functions: CourseCoreBar[] = [
new CourseCoreBar($r('app.media.ic_practice_camera'), '搜单词'), // 之前是"搜题目"
new CourseCoreBar($r('app.media.ic__practice_wrong_question'), '易错词'), // 之前是"易错题"
new CourseCoreBar($r('app.media.ic_practice_star'), '生词本'), // 替换"收藏"
new CourseCoreBar($r('app.media.ic_practice_notes'), '笔记'),
new CourseCoreBar($r('app.media.ic_chart_report'), '学习报告')
];
图标图标保持不变,文案做了替换。
3. 主题配色(Resources)
应用的图标和品牌色从备考风格调整为英语学习风格。资源文件中的颜色值、图片进行了替换,但资源引用的方式($r('app.color.xxx'))完全不变。
四、需要新增的内容
1. 音频播放(AudioPlayer)
英语学习特有的功能——单词发音播放。新增了 AudioPlayer 单例类:
export class AudioPlayer {
private static instance?: AudioPlayer;
private avPlayer: media.AVPlayer | null = null;
public static getInstance(): AudioPlayer {
if (!AudioPlayer.instance) {
AudioPlayer.instance = new AudioPlayer();
AudioPlayer.instance.initPlayer();
}
return AudioPlayer.instance;
}
public play(url: string): void {
// 播放音频逻辑
}
}
这在备考模板中是不需要的功能。
2. 生词本管理(NewWordManager)
英语学习特有的生词本功能,管理用户标记的"不认识"的单词。新增了 NewWordManager 类来管理生词本的增删改查,使用 Preferences 持久化存储。
3. 学习统计(StatisticsManager)
英语学习需要统计每日学习量、学习时长、掌握单词数等。新增了 StatisticsManager 来聚合这些数据。
4. 单词卡片页(WordCardPage)
全新的页面——单词卡片翻转交互。备考模板中没有对应功能。包含了:
- 3D 卡片翻转动画
- 正面显示单词/音标
- 背面显示中文含义/例句
- 左右滑动切换
- 自动播放模式
- 标记"已掌握"功能
五、需要删除的内容
1. 支付模块(aggregated_payment)
备考模板中的课程购买功能在英语学习 App 中暂不需要(当前版本为免费学习)。支付模块代码保留但不再使用。
2. 考试报名模块
备考模板中的考试报名、准考证管理等功能不再适用,已移除。
3. 特定的答题模式
备考模板中的"模拟考试"(完整试卷计时)改为"每日挑战"和"专项练习"两种模式。
六、改造的收益总结
通过这次"从备考到英语学习"的改造,团队获得了以下收益:
| 类别 | 模块数 | 代码复用率 | 说明 |
|---|---|---|---|
| 完全复用 | 6 个 | 100% | login_info, search, commonLib, minePage, feedback, base_select |
| 微小调整 | 3 个 | 80% | homePage(首页替换文案), answer_questions(适配题型), select_category |
| 全新开发 | 2 个 | 0% | WordCardPage, AudioPlayer/NewWordManager |
| 废弃 | 1 个 | - | aggregated_payment 暂不启用 |
总体代码复用率达到约 **70%**。这意味着一个新领域应用的核心功能,70% 的代码来自已有系统。这是模块化架构设计带来的最大价值——业务可替换,基础设施持久可用。
七、总结
从备考模板到英语学习 App 的改造实践,验证了多模块架构在业务转型中的强大能力。可复用的(登录、搜索、答题)、可替换的(课程→单词)、可新增的(音频、生词本、统计)和可删除的(支付)——这四种类型的代码管理策略,使得业务转型成了高效的模块重组,而不是从零开始的重写。对于需要快速构建垂直领域应用的团队来说,这种"复用+改造"的模式是最高效的路径。
更多推荐


所有评论(0)