仿晋江小说阅读器的鸿蒙app
此项目由于时间原因,我参与的不算多,在这里简单记录一下。
项目下载链接:https://47.111.94.227:24489/down/lzCLTogBGsKm.tar.gz 提取码:Z68bf5
一、设计需求
1.1 功能清单
书城界面
(1)书城首页顶部轮播图展示,左上角显示简介;
(2)推荐书目板块,显示三本推荐的书籍,包括书名和封面;
(3)热门书目板块,显示三本热门书籍,包括书名和封面;
(4)所有书籍板块,显示数据库中所有的书籍,包括书名、作者、简介和封面;
(5)筛选功能,有几个标签按钮可供选择进行书籍筛选,选择后会更新显示的书籍数量,并将书籍列表展示在所有书籍板块;
(6)管理员功能,可以编辑书籍的封面、书名、作者、字数、状态和简介;
(7)点击书籍可跳转至对应的书籍详情页面。
书架界面
(1)新书千字榜板块,横向滚轮显示前几本新书榜的书籍,包括书名和封面,点击更多可跳转至新书千字榜,查看新书千字榜所有书籍;
(2)顶部导航栏包括收藏、收藏作者、书单、关注作者、已阅列表,点击可跳转至对应页面;
(3)最近阅读板块,展示用户最近阅读过的书籍,包括封面、书名、作者、状态、标签和字数;
(4)收藏夹板块,展示用户创建的收藏夹以及加入收藏夹的书籍列表;
(5)收藏作者板块,展示用户已关注的作者列表;
(6)点击书籍可跳转至对应的书籍详情页面。
发现界面
(1)搜索栏板块,包括搜索条件、搜索栏输入框和搜索图标,搜索条件包括书名、作者和标签,可供用户选择按什么条件搜索,输入搜索内容点击搜索图标后跳转至搜索界面显示搜索结果;
(2)大家都在看板块,展示热门书籍列表,包括书名和对应简介;
(3)猜你喜欢板块,展示用户可能爱看的书籍列表,包括书名、作者、状态、标签和字数,右侧有一个按钮可以选择显示或关闭该板块;
(4)点击书籍可跳转至对应的书籍详情页面。
我的界面
(1)未登录状态下,有登录和注册按钮,提供用户登录或者注册功能;
(2)登陆后,可进行切换账号或退出登录操作;
(3)账号安全板块,可跳转至对应页面进行修改密码、手机号和邮箱信息;
(4)基本信息板块,可跳转至对应页面进行修改头像、昵称信息;
(5)发出评论板块,可跳转至对应页面查看用户当前所有的评论留言信息;
(6)足迹板块,可跳转至对应页面查看用户当前已浏览过的书籍信息列表,可以删除记录。
书籍详情界面
(1)显示书籍信息,包括书名、作者、标签、状态、简介和书名等信息;
(2)作者专栏板块,点击后跳转至对应页面可查看作者信息、作者所有作品,还可关注作者等操作;
(3)收藏板块,点击可将对应书籍加入想要的收藏夹,同时可以新建收藏夹;
(4)开始阅读板块,点击可跳转至阅读页面进行阅读;
(5)目录板块,点击可跳转至目录页面显示目录信息,包括章节数、章节名称、章节简介,还可正序或倒序显示;
(6)导入章节模块,点击可以将txt文件内容导入对应书籍;
(7)评论模块,包括输入栏和发送按钮,可以查看所有用户对该书的评论,也可发表评论。
阅读界面
(1)内容部分,展示书籍的文本内容,可供阅读;
(2)右上角设置里可以修改文本字体、翻页方式,还可切换夜间或日间模式
(3)底部导航栏,包括翻页按钮和跳转至目录按钮;
(4)左上角有返回退出阅读按钮,同时显示当前阅读章节。
二、主体框架
2.1 总体架构

2.2 数据流向
数据类型 | 数据流向 |
用户登录/注册 | 用户输入信息→ 客户端(UserLoginInfo.ets)→ 服务器(UserController)→ 数据库(MySQL)→ 客户端存储(偏好存储)→ 界面显示 |
书籍数据 | 服务器(BookController)→ 客户端(BookStore.ets)→ 界面显示(书城、书架、详情页) |
评论数据 | 用户输入评论→ 客户端(BookController)→ 服务器(BookController)→ 数据库(MySQL)→ 客户端显示(书籍详情页) |
收藏夹数据 | 用户操作→ 客户端(FavoriteController)→ 服务器(FavoriteController)→ 数据库(MySQL)→ 客户端显示(书架、收藏夹) |
阅读记录 | 用户阅读行为→ 客户端(RecentReadDao)→ 服务器(UserController)→ 数据库(MySQL)→ 客户端显示(足迹页) |
三、服务端数据库的设计
3.1 数据库
序号 | 表名 | 功能 |
1 | t_author | 作者表 |
2 | t_book | 书籍表 |
3 | t_book_comment | 评论表 |
4 | t_book_fav | 收藏书籍表 |
5 | t_chapter | 章节表 |
6 | t_chapter_content | 内容表 |
7 | t_favorite | 收藏夹表 |
8 | t_follow | 关注表 |
9 | t_follow_author | 关注作者表 |
10 | t_read_history | 最近阅读表 |
11 | t_user | 用户表 |
3.2 E-R图

3.3 各表的设计
3.2.1 作者表(t_author)

3.2.2 书籍表(t_book)

3.2.3 评论表(t_book_comment)

3.2.4 收藏书籍表(t_book_fav)

3.2.5 章节表(t_chapter)

3.2.6 内容表(t_chapter_content)

3.2.7 收藏夹表(t_chapter_content)

3.2.8 关注表(t_chapter_content)

3.2.9 关注作者表(t_follow_author)

3.2.10 最近阅读表(t_read_history)

3.2.11 用户表(t_user)

四、具体实现
4.1 代码的组成
4.1.1 客户端代码组成说明
文件夹名 | 核心文件 | 主要功能 |
db | BookStore.ets,DataCenter.ets | 本地SQLite 封装:17 张表创建、事务、缓存、统计算法;一开关(USE_REMOTE)决定走本地 SQLite 还是远程 Tomcat |
model | *Data.ets | 与后端字段1:1 映射的 15 个类型定义 |
net | RemoteBookStore.ets,Api.ets | 后端30 + 个 REST 接口的 ArkTS 客户端封装;含 multipart 上传;统一出口:注册/登录/收藏/搜索/轮播/专栏等 20 + 接口 |
pages | *Page.ets | 存放所有页面组件,包括书城、书架、发现、我的等页面,以及书籍详情、阅读界面等。 |
user | UserLoginInfo.ets | 内存单例+ Preferences 持久化;事件总线通知各页刷新 |
utils | BookParser.ets,PreferencesUtils.ets | TXT 正则拆章;epub 预留接口;选中历史、用户、收藏等 key-value 封装 |
entryability | EntryAbility.ets | 应用入口能力 |
common | EntryContext.ets | 全局AbilityContext 单例,供图片/数据库/Preferences 使用 |
4.1.2 服务端代码组成说明
模块 | 主要文件 | 主要功能 |
控制器层 | 处理作者相关请求,如获取作者信息、作品列表等。 | |
处理书籍相关请求,如书籍列表、搜索、详情、评论等。 | ||
处理章节相关请求,如章节列表、内容、最新章节等。 | ||
处理收藏夹相关请求,如收藏夹列表、书籍收藏等。 | ||
处理用户相关请求,如注册、登录、信息更新、头像更新等。 | ||
饮食记录子模块 | 提供作者数据的增删改查操作。 | |
提供书籍数据的增删改查操作。 | ||
提供章节数据的增删改查操作。 | ||
提供收藏夹数据的增删改查操作。 | ||
提供用户阅读记录的增删改查操作。 | ||
提供用户数据的增删改查操作。 | ||
工具类 | 提供数据库连接和关闭操作的工具方法。 | |
模型层 | 定义作者实体类。 | |
定义书籍实体类。 | ||
定义章节实体类。 | ||
定义章节内容实体类。 | ||
定义收藏夹实体类。 | ||
定义关注作者的视图对象。 | ||
定义用户评论的视图对象。 | ||
定义用户实体类。 |
4.2 文件清单
4.2.1 核心页面文件清单
序号 | 文件名 | 主要功能 |
1 | BookMallPage.ets | 书城页面,展示书籍列表、轮播图、筛选功能等。 |
2 | BookshelfPage.ets | 书架页面,展示用户的收藏夹、最近阅读、收藏作者等。 |
3 | DiscoverPage.ets | 发现页面,展示搜索栏、热门书籍、猜你喜欢等。 |
4 | ProfilePage.ets | 我的页面,展示用户信息、账号安全、基本信息等。 |
5 | BookDetailPage.ets | 书籍详情页面,展示书籍信息、作者专栏、评论等。 |
6 | ReadPage.ets | 阅读页面,展示书籍内容,支持翻页、字体调整等。 |
7 | CatalogPage.ets | 目录页面,展示书籍章节列表,支持排序和搜索。 |
8 | Login.ets | 登录:墨绿渐变、图标输入框、事件总线 |
9 | Register.ets | 注册:同名检查、手机号、邮箱、笔名 |
10 | SearchResultPage.ets | 搜索结果:书名/作者/标签三通道 |
11 | AuthorPage.ets | 作者主页:头像、签名、完结/连载列表、关注 |
12 | NewBookPage.ets | 新书榜:横向分类、多选筛选、标签换行 |
13 | AccountSecurityPage.ets | 账号安全:改密码、手机号、邮箱 |
14 | BasicInfoPage.ets | 基本信息:头像(图库)、昵称、实时预览 |
15 | UserCommentPage.ets | 我的评论:左头像、绿色书名、时间 |
16 | FootprintPage.ets | 我的足迹:最近30 本、滑动删除 |
17 | AdminPage.ets | 简易后台:书籍CRUD、实时刷新、弹窗编辑 |
18 | CollectListPage.ets | 收藏列表:复用ArticleItem 组件 |
4.2.2 组件文件清单
序号 | 文件名 | 主要功能 |
1 | ArticleItem.ets | 文章列表项组件,展示单个文章的标题、作者、简介等。 |
2 | CatalogItem.ets | 目录项组件,展示单个章节的标题、更新时间等。 |
3 | ChapterContent.ets | 章节内容组件,展示章节的正文内容。 |
4 | FollowAuthorItem.ets | 关注作者项组件,展示作者头像、笔名、签名等。 |
5 | UserCommentItem.ets | 用户评论项组件,展示单条评论的内容、作者、时间等。 |
4.2.3 数据模型文件清单
序号 | 文件名 | 对应后端实体 |
1 | NewBookItem.ets | t_book |
2 | HotBookItem.ets | hot_books |
3 | ChapterContent.ets | t_chapter_content |
4 | CatalogData.ets | t_chapter |
5 | User.ets | t_user |
6 | Response.ets | R<T> |
7 | Article.ets | 轮播/专栏/问答 |
8 | ArtcleItemBean.ets | 文章卡片 |
9 | Tree.ets | 知识体系 |
10 | Search.ets | 热词 |
11 | Recommend.ets | 猜你喜欢 |
12 | Pair.ets | 通用键值对 |
13 | NovelItem.ets | 小说卡片 |
4.2.4 工具类文件清单
序号 | 文件名 | 主要功能 |
1 | BookParser.ets | TXT 正则拆章;epub 预留 |
2 | CollectUtils.ets | 收藏/取消收藏封装 |
3 | LogUtils.ets | hilog 二次封装 |
4 | PreferencesUtils.ets | Preferences 读写 |
RouterUtils.ets | 路由跳转 | |
StringUtils.ets | 资源字符串同步获取 | |
Toast.ets | 轻提示 | |
WindowUtils.ets | 窗口宽高获取 |
4.2.5 数据库操作文件清单
序号 | 文件名 | 主要功能 |
1 | BookStore.ets | 提供书籍数据的本地存储和操作方法。 |
2 | RemoteBookStore.ets | 提供书籍数据的远程存储和操作方法,与服务器端交互。 |
3 | DataCenter.ets | 提供数据存储的统一接口,根据配置选择本地或远程存储。 |
4.2.6 接口定义文件清单
序号 | 接口名 | 后端路径 | 主要功能 |
1 | /api/book/list | GET | 全部书籍 |
2 | /api/book/hot | GET | 热门10 本 |
3 | /api/book/new | GET | 新书干字榜Top20 |
4 | /api/book/search | GET | 书名模糊 |
5 | /api/book/searchByAuthor | GET | 作者模糊 |
6 | /api/book/searchByTag | GET | 标签模糊 |
7 | /api/book/detail | GET | 单本详情 |
8 | /api/book/update | POST | 管理员更新 |
9 | /api/book/uploadChapters | POST | TXT 批量上传 |
10 | /api/book/comment | GET/POST | 评论列表/发表 |
11 | /api/chapter/list | GET | 章节目录 |
12 | /api/chapter/content | GET | 单章正文 |
13 | /api/chapter/latest | GET | 最新章节 |
14 | /api/user/register | POST | 注册 |
15 | /api/user/login | POST | 登录 |
16 | /api/user/info | GET | 用户信息 |
17 | /api/user/updateInfo | POST | 更新资料 |
18 | /api/user/updatePassword | POST | 修改密码 |
19 | /api/user/updateAvatar | POST | 更换头像 |
20 | /api/user/recentRead | GET | 最近阅读 |
21 | /api/user/addRecentRead | POST | 写入阅读历史 |
22 | /api/user/removeRecentRead | POST | 删除单条记录 |
23 | /api/user/fav/list | GET | 收藏夹列表 |
24 | /api/user/fav/ | POST | 新建收藏夹 |
25 | /api/user/fav/collect | POST | 收藏书籍 |
26 | /api/user/fav/uncollect | POST | 取消收藏 |
27 | /api/user/followAuthor/list | GET | 已关注作者 |
28 | /api/user/followAuthor/add | POST | 关注 |
29 | /api/user/followAuthor/remove | POST | 取消关注 |
30 | /api/user/updateSpecialFollow | POST | 设为特别关注 |
31 | /api/author | GET | 作者主页 |
4.2.7 资源文件清单
序号 | 文件类型 | 典型文件 | 主要功能 |
1 | icon | ic_back.png | 统一返回箭头 |
2 | cover | newbook_cover1~10.jpg | 默认书籍封面 |
3 | logo | logo1.png | 启动图标 |
4 | color | color.json | 主色#ff23ae94 |
5 | string | strings.json | 中英双语 |
6 | float | float.json | 间距/字号 |
4.2.8 配置文件清单
序号 | 文件名 | 主要功能 |
1 | module.json5 | 包名、权限、设备类型、入口Ability |
2 | main_pages.json | 18 个页面路由 |
3 | backup_config.json | 自动备份开关 |
4.2.9 页面布局文件清单
序号 | 页面名称 | 布局特点 | 主要文件 |
1 | 书城页面 | 纵向滚动布局 | BookMallPage.ets |
2 | 书架页面 | 网格+卡片布局 | BookshelfPage.ets |
3 | 发现页面 | 列表+卡片布局 | DiscoverPage.ets |
4 | 我的页面 | 分栏布局 | ProfilePage.ets |
5 | 书籍详情页面 | 分层信息展示 | BookDetailPage.ets |
6 | 阅读页面 | 数据可视化布局 | ReadPage.ets |
7 | 目录页面 | 列表布局 | CatalogPage.ets |
8 | 用户评论页面 | 社交化布局 | UserCommentPage.ets |
9 | 足迹页面 | 列表布局 | FootprintPage.ets |
4.2.10 路由配置清单
序号 | 路由名称 | 目标页面 | 参数说明 |
1 | 书城页面 | BookMallPage.ets | 无 |
2 | 书架页面 | BookshelfPage.ets | 无 |
3 | 发现页面 | DiscoverPage.ets | 无 |
4 | 我的页面 | ProfilePage.ets | 无 |
5 | 书籍详情页面 | BookDetailPage.ets | bookId:书籍 ID |
6 | 阅读页面 | ReadPage.ets | bookId:书籍 ID,chapterId:章节 ID |
7 | 目录页面 | CatalogPage.ets | bookId:书籍 ID |
8 | 用户评论页面 | UserCommentPage.ets | 无 |
9 | 足迹页面 | FootprintPage.ets | 无 |
五、使用说明
5.1开屏图
运行后会展示开屏动画页面

5.2登录注册界面
未登录状态下点击“我的”页面中的登录或者注册按钮即可跳转至登录或注册页面。
在注册页面按提示分别输入信息,最后点击注册按钮即可注册成功。
在注册页面可以选择是否显示密码。
也可以点击“已有账号?立即登录”跳转至登陆页面。

在登录页面输入用户的账号和密码,再点击登录按钮即可登录成功,并跳转至书城页面,同时,“我的”页面也会更新成登陆状态,显示用户的头像和笔名。
在登录页面可以选择是否显示密码。


5.3书城界面
书城页面顶部是轮播图动画展示。
下方反别是推荐书目专栏、热门书目专栏和所有书目专栏。前两者只显示对应书籍列表中的前三本。
在轮播图和推荐专栏之间有一行标签筛选栏,可以点击想要的标签筛选出对应的书籍,下方小字提示筛选后的书籍数量,筛选结果显示在所有书籍专栏。
在书城页面最下方有一个管理的按钮,点击即可跳转至简单管理员页面。在该页面会显示所有书籍列表,点击对应书籍下方的编辑按钮即可修改书籍相关的信息,点击保存后实现修改书籍信息的功能。





5.4发现界面
页面由搜索栏、大家都在看板块和猜你喜欢板块构成。
大家都在看展示一些热门书籍,点击书名即可跳转至对应书籍的详情页面。
点击猜你喜欢右侧的按钮,可以关闭猜你喜欢。

点击搜索栏左侧,可以选择筛选方法,总共3种,分别为书名,作者,标签。

搜索功能

点击文本后,会跳转到该书的详情页
5.5书架界面
书架页面由收藏、收藏作者两个板块构成。
收藏板块包含收藏夹、最近阅读和新书千字榜。
收藏作者板块包含用户已关注的所有作者列表。
如图,点击收藏作者即可显示已关注的作者。
最近阅读显示最近浏览过的书籍列表信息。
点击收藏夹会显示用户添加在对应收藏夹中的书籍信息列表。



点击更多,进入新书千字榜
可以点击标签筛选对应的书籍。


5.6书籍详情页界面
书籍详情页面由书籍信息、作者专栏板块、收藏板块、阅读板块、目录板块、导入板块和评论板块构成。


点击收藏可以收藏该书,并且会跳出弹窗,可以选择收藏到哪个文件夹,点击弹窗右上角的+,可以创建新收藏夹,收藏夹在书架界面会展示出来


点击目录,可以实现倒叙升序展示章节


点击开始阅读或者某个章节,跳转到该书的阅读界面,能够实现书页不同方式滚动,调节字体大小和调节日间或者夜间。


点击导入章节可以实现本地导入

点击作者专栏进入该作者主页

最下方可以在输入栏输入内容并点击右侧发送按钮实现评论功能。
同时会展示当前该书籍的所有评论信息,包括用户的头像、昵称、评论内容和评论时间。

5.7我的界面
未登录状态显示默认头像,右侧提示登入或注册。同时点击其他图标都会跳转至登陆页面。
用户登陆后会切换成登陆状态,包括用户头像、昵称,新增切换账号和退出登录的按钮,点击可实现对应功能。


点击账号安全能够实现邮箱、手机号和密码的更改

点击基本信息按钮,能够查看自己的个人信息,实现更改头像和昵称的功能

点击我的评论,可以查看我的所有评论

点击足迹,会显示我刚刚看过的所有书,足迹可以按删除,进行单条删除

六、使用到的技术
6.1 总体技术
1、创建HarmonyOS应用,使用TypeScript(ArkTS)作为前端开发语言
2、数据库端则「云端 MySQL + 端侧 SQLite」双轨并行,通过统一的数据中心开关实现「演示/生产」一键热切换
3、应用架构采用前后端分离设计,HarmonyOS客户端与Java服务器通过HTTP通信,HarmonyOS客户端负责UI展示和用户交互,Java服务器端负责业务逻辑处理和数据库操作通过HTTP RESTful接口进行数据通信。
开发 | 模块 | 使用技术 | 说明 |
客户端开发 | 前端开发框架 | ArkUI框架 | HarmonyOS声明式UI开发框架,支持一次开发、多端部署 |
开发语言 | ArkTS | 客户端使用ArkTS,服务器使用JavaScript | |
本地数据库 | @ohos.data.relationalStore | 端侧SQLite 封装,支持 SQL92 标准,用于离线缓存与演示模式 | |
页面路由 | @ohos.router | 官方路由能力,支持参数传递、栈式返回、replace 等常用模式 | |
状态管理 | @State / @Prop / @Link / @Provide | 组件级响应式装饰器,配合emitter 事件总线实现跨页通信 | |
服务器端开发 | 服务器技术 | Java + Servlet | 基于Java的Web服务器技术 |
Web容器 | Tomcat 9.0 | Java Web应用服务器,提供Servlet容器 | |
服务器框架 | 原生Servlet/JSP | 使用标准的Servlet API处理HTTP请求 | |
开发环境 | IDEA 2021.1.1 + JDK | Java集成开发环境与Java开发工具包 | |
数据库连接 | JDBC | Java数据库连接,用于与MySQL通信 | |
数据存储 | 数据库系统 | MySQL 8.0 | 关系型数据库,负责用户、书籍、章节、评论、收藏等持久化数据 |
数据库管理工具 | Navicat Premium | 可视化数据库管理工具,支持SQL操作和数据同步 | |
通信协议 | 网络通信 | HTTP + JSON | 基于HTTP协议,使用JSON格式进行前后端数据交换 |
数据序列化 | JSON | 统一使用JSON序列化,前后端字段1:1映射 | |
部署环境 | 服务器环境 | JDK + Tomcat 9.0 + MySQL | Java运行环境、Web容器和数据库服务 |
部署方式 | 本地或云服务器部署 | 支持本地开发测试和云端生产环境部署 |
6.2 关键技术
6.2.1本地-远程双端一键切换
DataCenter 内 USE_REMOTE = true 时所有业务自动走 RemoteBookStore;false 时走本地 SQLite,无需修改任何 UI 代码。
6.2.2阅读页双翻页模式
左右滑动:Swiper + 拆页算法(字符数/行高/屏高)
上下滑动:Scroll + 章间空白分隔页 + 预加载下一章
夜间模式:全局Color 资源 + Preferences 持久化
6.2.3TXT批量导入事务
前端:DocumentViewPicker → ArrayBuffer → multipart/form-data
后端:UploadChaptersServlet 一次性解析 \n\n 分章 → 双表事务插入(t_chapter、t_chapter_content)
回滚:任一失败自动rollback,保证目录-正文一致性
6.2.4收藏夹幂等设计
前端先DELETE 再 INSERT;后端用 ON DUPLICATE KEY UPDATE 防重复,支持同一本书跨收藏夹移动。
6.2.5事件总线解耦
emitter事件名 | 订阅方 | 用途 |
userLogin | 所有Header | 刷新头像/昵称 |
favChanged | BookshelfPage | 实时更新收藏数 |
recentReadChanged | FootprintPage | 删除后同步列表 |
avatarUpdated | ProfilePage | 即时预览新头像 |
6.2.6数据库性能优化
本地:hot_books、new_books 首次启动批量插入 → 后续仅增量更新
远程:最近阅读、收藏夹均分页拉取,单次≤30 条,避免一次性全表查询