个人健康Web应用设计
引言
编制目的
本文档详细完成对“知康”——个人健康Web应用的体系结构设计和模块的详细设计,达到指导后续软件构造的目的,同时实现和测试人员及用户的沟通。
本文档面向开发人员、测试人员及最终用户而编写,是了解系统的导航。
- 词汇表
词汇含义 | 词汇名称 | 备注 |
---|---|---|
Healther | 知康 | 应用名称 |
- 参考文献
《知康——个人健康Web应用 需求规格说明书》
- 产品概述
“知康”是一款关注个人健康的Web2.0应用,它结合了当下流行的互联网社交元素,加上原本的常规运动健康项目,以此来关注个人健康。“知康”主要包括以下几个模块:运动健身和个人健康数据采集和数据统计分析;活动、朋友圈、兴趣组等社交行为;教练和医生提供健康建议;等等。
系统的用例图如图2-1所示。
-
图2-1 用例图
-
系统的用例描述如表2-1所示。
-
表2-1 用例描述表
参与者 | 用例 |
---|---|
个人用户 | 健康管理;活动管理;建议管理(查看);统计分析;朋友圈;兴趣组;消息管理;个人信息管理 |
教练(在个人用户基础上) | 建议管理(发表);消息管理 |
医生(在个人用户基础上) | 建议管理(发表);消息管理 |
系统管理员 | 用户管理;权限管理;活动管理;建议管理(管理);朋友圈(管理);兴趣组(管理);消息管理;系统管理 |
-
体系结构设计
-
系统概述
“知康”是一款关注个人健康的WEB应用,分为浏览器端(前端)和服务器端(后端)两个部分。前端使用Html、CSS、JavaScript语言编写,采用Bootstrap前端框架,并且使用Ajax技术。后端使用PHP语言编写,采用Laravel 5.1框架,其中数据库方面使用SQLite 3。
Laravel开发框架:
Laravel是一款采用MVC架构的PHP应用开发框架,Laravel的应用目录结构如表3-1-1所示。
表3-1-1 Laravel应用目录结构
目录 | 描述 |
---|---|
app | 包含了应用的核心代码,如Controller、Model等 |
bootstrap | 包含了少许文件用于框架的启动和自动载入配置,还有一个cache文件夹用于包含框架生成的启动文件以提高性能 |
config | 包含了应用所有的配置文件 |
database | 包含了数据迁移及填充文件,以及SQLite数据库存储文件 |
public | 包含了Laravel框架核心的引导文件index.php,以及任何可以公开的静态资源,如css,Javascript,images等 |
resources | 包含了视图文件(views)及原生资源文件(LESS、SASS、CoffeeScript),以及本地化文件 |
storage | 包含了编译过的Blade模板、基于文件的session、文件缓存,以及其它由框架生成的文件 |
tests | 包含自动化测试 |
vender | 包含Composer依赖,包含了Laravel源代码和第三方依赖包 |
app文件夹包含了应用的核心代码,app目录结构如表3-1-2所示。
表3-1-2 Laravel app目录结构
目录/文件 | 描述 |
---|---|
/app/Console | 提供进入应用核心的API,包含了所有的Artisan命令 |
/app/Events | 是放置事件类的地方,事件可以用于通知应用其它部分给定的动作已经发生,并提供灵活的解耦的处理 |
/app/Exceptions | 包含应用的异常处理器,同时还是处理应用抛出的任何异常的好地方 |
/app/Http | 提供进入应用核心的API,包含了控制器、过滤器和请求等 |
/app/Http/Controllers | 包含了用于提供基本的逻辑、数据模型交互以及加载应用程序的视图文件的控制器类 |
/app/Http/Middleware | 包含了HTTP中间件,对HTTP请求进行过滤 |
/app/Http/Requests | 包含了对核心类Request的扩展 |
/app/Http/routes.php | 这是应用的路由文件,其中包含路由规则,告诉Laravel如何将传入的请求连接到路由处理的闭包函数、控制器和操作 |
/app/Jobs | 是放置队列任务的地方,应用中的任务可以被队列化,也可以在当前请求生命周期内同步执行 |
/app/Listeners | 包含事件的处理器类,处理器接收一个事件并提供对该事件发生后的响应逻辑 |
/app/Providers | 包含了服务提供者 |
/app/*.php | 在app目录下存储模型(Model),模型是代表应用程序的信息(数据)和操作数据的规则的一些类 |
Laravel是model-view-controller(MVC)架构模式,其中Model在app目录下,View在/Resources/views目录下,Controller在/app/Http/Controllers目录下。Laravel的一次响应流程如图3-1-1所示。
图3-1-1 Laravel的一次响应流程
当访问一个laravel应用程序时,浏览器发送一个请求,Laravel应用的所有请求入口都是public/index.php文件,所有请求都会被web服务器导向这个文件。接下来Laravel启动内核,Web服务器将请求传递到Laravel的路由引擎。该Laravel路由器接收到请求后,根据配置重定向到相应的控制器类的方法。然后由控制器类接管。在某些情况下,控制器将立即渲染一个视图,这是一个模板,将被转换成HTML并且发送回浏览器。更普遍的动态网站,控制器与模型进行交互,与数据库进行通信。调用模型后,控制器呈现最终视图(HTML、CSS和图像)并返回完整的web页面到用户的浏览器。
- 体系结构模型
系统的体系结构高层抽象模型如图3-2-1所示。
图3-2-1 系统体系结构高层抽象模型
在系统的体系结构高层抽象模型中,最主要的是控制器层、模型层和视图层。控制器层负责封装外界作用于模型的操作和对数据流向的控制,即负责分发和处理用户的请求;模型层负责封装数据和所有基于对这些数据的基本操作;视图层负责封装数据的显示,即用户界面层。
根据需求,继续细化系统的模块。系统分为前台(Front)和后台(Admin)两个部分,前台涉及的用户对象有个人用户、教练、医生、系统管理员,后台涉及的用户对象是系统管理员,其中教练和医生是在个人用户基础之上的(拥有个人用户的权限)。前台系统模块如表3-2-1所示,后台系统模块如表3-2-2所示。表中的用户认证模块(Auth)是指注册登录、用户权限认证模块,默认模块(Index)是指首页和其他不能单独成模块的小功能。
表3-2-1 前台系统模块
模块 | 模块名称 | 涉及的用户对象 |
---|---|---|
Health | 健康管理 | 个人用户 |
Activity | 活动管理 | 个人用户 |
Advice | 建议管理 | 个人用户、教练、医生 |
Article | 文章管理 | 个人用户、教练、医生 |
Analysis | 统计分析 | 个人用户 |
Message | 消息管理 | 个人用户 |
Personal | 个人信息管理 | 个人用户 |
Friend | 好友管理 | 个人用户 |
Moment | 朋友圈 | 个人用户 |
Group | 兴趣组 | 个人用户 |
Auth | 用户认证* | 个人用户、系统管理员 |
Index | 默认模块* | 个人用户、教练、医生、系统管理员 |
表3-2-2 后台系统模块
模块 | 模块名称 | 涉及的用户对象 |
---|---|---|
User | 用户管理 | 系统管理员 |
Activity | 活动管理 | 系统管理员 |
Article | 文章管理 | 系统管理员 |
Message | 消息管理 | 系统管理员 |
Moment | 朋友圈 | 系统管理员 |
Group | 兴趣组 | 系统管理员 |
System | 系统管理 | 系统管理员 |
Auth | 用户认证* | 系统管理员 |
Index | 默认模块* | 系统管理员 |
系统的前台模块开发包图如图3-2-2所示。后台模块开发包图如3-2-3所示。
图3-2-2 前台模块开发包图
图3-2-3 后台模块开发包图
- 数据库设计
系统数据库设计的各表如下所示。
注:A_I为Auto Increment(自增),PK为Primary Key(主键),FK为Foreign Key(外键)。
用户管理、权限管理、个人信息管理:
users表 (用户表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 用户ID |
username | VARCHAR, UNIQUE | 用户名 |
VARCHAR, UNIQUE | 邮箱 | |
phone_number | VARCHAR, UNIQUE | 手机号 |
password | VARCHAR | 密码 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
deleted_at | DATETIME | 软删除时间 |
roles表 (用户角色表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 角色ID |
name | VARCHAR, UNIQUE | 角色标识符 |
display_name | VARCHAR | 角色名 |
description | VARCHAR | 角色描述 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
permissions表 (角色权限表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 权限ID |
name | VARCHAR, UNIQUE | 权限标识符 |
display_name | VARCHAR | 权限名 |
description | VARCHAR | 权限描述 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
role_user表(用户-角色关系表):
字段 | 类型 | 解释 |
---|---|---|
role_id | BIGINT, UNSIGNED, ;FK(roles - id) | 角色ID |
user_id | BIGINT, UNSIGNED, ;FK(permissions - id) | 用户ID |
c++
PK: (role_id, user_id)
permission_role表(角色-权限关系表):
字段 | 类型 | 解释 |
---|---|---|
permission_id | BIGINT, UNSIGNED, ;FK(permissions - id) | 权限ID |
role_id | BIGINT, UNSIGNED, ;FK(roles - id) | 角色ID |
c++
PK: (permission_id, user_id)
user_info表 (用户信息表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, PK, ;FK(users - id) | 用户ID |
real_name | VARCHAR | 真实姓名 |
nickname | VARCHAR | 昵称 |
gender | TINYINT | 性别 |
province | VARCHAR | 所在省份 |
city | VARCHAR | 所在城市 |
birthday | DATE | 生日 |
introduction | TEXT | 自我介绍 |
avatar_url | VARCHAR | 头像URL |
info_secret | TINYINT | 隐私信息可访问性;0 公开;1 仅自己可见;2 仅好友可见;3 仅医生教练可见;4 仅好友和医生教练可见 |
health_secret | TINYINT | 健康数据可访问性 同上 |
活动管理:
activity_types表(活动管理 · 活动类型表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 活动类型ID |
name | VARCHAR, UNIQUE | 活动类型名称 |
description | VARCHAR | 活动类型描述 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
activities表(活动管理 · 活动表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 活动ID |
topic | VARCHAR | 活动主题 |
start_time | DATETIME | 活动开始时间 |
end_time | DATETIME | 活动结束时间 |
province | VARCHAR | 活动省份 |
city | VARCHAR | 活动城市 |
address | VARCHAR | 活动地点 |
content | TEXT | 活动内容 |
remark | TEXT | 备注 |
is_need_check | TINYINT | 参与者是否需要审核 |
is_over | TINYINT | 活动是否结束 |
type_id | BIGINT, UNSIGNED,;FK(activity_types- id) | 活动类型 |
user_id | BIGINT, UNSIGNED,;FK(users - id) | 发起者ID |
group_id | BIGINT, UNSIGNED,;FK(groups - id) | 活动的兴趣组ID,非兴趣组活动此处为0 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
activity_user表(活动管理 · 活动-用户参与关系表):
字段 | 类型 | 解释 |
---|---|---|
activity_id | BIGINT, UNSIGNED,;FK(activities - id) | 活动ID |
user_id | BIGINT, UNSIGNED,;FK(users - id) | 用户ID |
is_approval | TINYINT | 是否通过审核 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
c++
PK: (activity_id, user_id)
健康管理、统计分析:
user_goals表(用户目标表):
字段 | 类型 | 解释 |
---|---|---|
user_id | BIGINT, UNSIGNED,;FK(users - id) | 用户ID |
heat | DOUBLE | 每周目标燃烧热量(大卡) |
distance | DOUBLE | 每周目标运动距离(km) |
step | INT | 每周目标运动步数 |
weight | DOUBLE | 理想体重(kg) |
data_sports表(运动数据表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 运动数据ID |
user_id | BIGINT, UNSIGNED,;FK(users - id) | 用户ID |
type | TINYINT | 运动类型(步行、跑步、游泳、健身、骑行) |
start_time | DATETIME | 运动开始时间 |
end_time | DATETIME | 运动结束时间 |
sports_time | TIME | 运动时长 |
heat | DOUBLE | 燃烧热量(大卡) |
distance | DOUBLE | 运动距离(km) |
step | INT | 运动步数 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
data_health表(身体健康数据表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 身体健康数据ID |
user_id | BIGINT, UNSIGNED,;FK(users - id) | 用户ID |
time | DATETIME | 测量时间 |
height | DOUBLE | 身高(cm) |
weight | DOUBLE | 体重(kg) |
fat_percentage | DOUBLE | 脂肪率 |
muscle_percentage | DOUBLE | 肌肉率 |
visceral_fat | DOUBLE | 内脏脂肪 |
metabolic_rate | DOUBLE | 基础代谢率 |
moisture_percentage | DOUBLE | 水分率 |
protein | DOUBLE | 蛋白质 |
bone_mass | DOUBLE | 骨量(kg) |
bmi | DOUBLE | 身体质量指数BMI |
heart_rate | INT | 心率(min) |
blood_pressure | VARCHAR | 血压 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
data_sleep表(睡眠数据表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 睡眠数据ID |
user_id | BIGINT, UNSIGNED,;FK(users - id) | 用户ID |
start_time | DATETIME | 睡觉时间 |
end_time | DATETIME | 起床时间 |
sleeping_time | TIME | 睡眠时长 |
deep_sleeping_time | TIME | 深度睡眠时长 |
wake_up_times | INT | 唤醒次数 |
sleep_points | DOUBLE | 睡眠质量评分 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
建议管理:
questions表(建议管理 · 用户问题表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 问题ID |
topic | VARCHAR | 问题主题 |
content | TEXT | 问题内容 |
type | TINIINT | 问题类型 运动/健康/综合 |
user_id | BIGINT, UNSIGNED,;FK(users - id) | 提问的用户ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
advices表(建议管理 · 专家建议表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 建议ID |
content | TEXT | 建议内容 |
question_id | BIGINT, UNSIGNED,;FK(questions - id) | 提问ID |
user_id | BIGINT, UNSIGNED,;FK(users - id) | 专家ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
advice_replies表(建议管理 · 建议回复表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 回复ID |
content | TEXT | 回复内容 |
advice_id | BIGINT, UNSIGNED, ;FK(advices- id) | 建议ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 用户ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
文章管理:
articles表(文章管理 · 专家文章表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 文章ID |
topic | VARCHAR | 文章主题 |
content | TEXT | 文章内容 |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 专家ID |
view_count | INT | 浏览数量 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
article_comments表(文章管理 · 文章评论表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 评论ID |
content | TEXT | 评论内容 |
article_id | BIGINT, UNSIGNED, ;FK(articles - id) | 文章ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 评论者ID |
to_user_id | BIGINT, UNSIGNED, ;FK(users - id) | 被评论者ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
article_likes表(文章管理 · 文章点赞表):
字段 | 类型 | 解释 |
---|---|---|
article_id | BIGINT, UNSIGNED, ;FK(articles - id) | 文章ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 用户ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
c++
PK: (article_id, user_id)
消息管理:
message_types表(消息管理 · 消息类型表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 消息类型ID |
name | VARCHAR | 类型名称 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
message_type_user表(消息管理 · 消息类型-用户关系表):
字段 | 类型 | 解释 |
---|---|---|
message_type_id | BIGINT, UNSIGNED, ;FK(message_types - id) | 消息类型ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 用户ID |
c++
PK: (message_type_id, user_id)
注:系统通知、好友申请、建议是默认推送,无需出现在表中。
messages表(消息管理 · 消息表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 消息ID |
topic | VARCHAR | 消息主题 |
content | TEXT | 消息内容 |
type_id | BIGINT, UNSIGNED, ;FK(message_types - id) | 消息类型ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
message _user表(消息管理 · 消息-用户关系表):
字段 | 类型 | 解释 |
---|---|---|
message__id | BIGINT, UNSIGNED, ;FK(messages - id) | 消息ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 用户ID |
is_read | TINYINT | 是否已读 |
c++
PK: (message_ _id, user_id)
朋友圈管理:
friends表(朋友圈 · 好友表):
字段 | 类型 | 解释 |
---|---|---|
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 用户ID |
friend_id | BIGINT, UNSIGNED, ;FK(users - id) | 好友ID |
is_passed | TINYINT | 对方是否通过申请 |
friend_label | VARCHAR | 好友标签 |
friend_group_id | BIGINT, UNSIGNED, ;FK(friend_groups - id) | 好友分组 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
c++
PK: (user_id, friend_id)
friend_groups表(朋友圈 · 用户的好友分组表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 分组ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 用户ID |
name | VARCHAR | 分组名称 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
moments表(朋友圈 · 朋友圈状态表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 状态ID |
content | TEXT | 状态内容 |
place | VARCHAR | 所在地点 |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 发布者ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
moment_likes表(朋友圈 · 朋友圈点赞表):
字段 | 类型 | 解释 |
---|---|---|
moment_id | BIGINT, UNSIGNED, ;FK(moments - id) | 状态ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 用户ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
c++
PK: (moment_id, user_id)
moment_comments表(朋友圈 · 朋友圈状态评论表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 评论ID |
content | TEXT | 评论内容 |
momment_id | BIGINT, UNSIGNED, ;FK(articles - id) | 状态ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 评论者ID |
to_user_id | BIGINT, UNSIGNED, ;FK(users - id) | 被评论者ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
兴趣组管理:
group_types表(兴趣组 · 兴趣组类型表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 兴趣组类型ID |
name | VARCHAR, UNIQUE | 兴趣组类型名称 |
description | VARCHAR | 兴趣组类型描述 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
groups表(兴趣组 · 兴趣组表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 兴趣组ID |
name | VARCHAR, UNIQUE | 兴趣组标识符 |
display_name | VARCHAR, UNIQUE | 兴趣组名称 |
description | TEXT | 兴趣组简介 |
type_id | BIGINT, UNSIGNED, ;FK(group_types - id) | 兴趣组类型ID |
province | VARCHAR | 所在省份 |
city | VARCHAR | 所在城市 |
logo_url | VARCHAR | 兴趣组LOGO |
is_public | TINYINT | 是否公开 |
is_checked | TINYINT | 是否通过审核 |
is_need_check | TINYINT | 申请者是否需要审核 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
group_admins表(兴趣组 · 兴趣组管理员表):
字段 | 类型 | 解释 |
---|---|---|
group_id | BIGINT, UNSIGNED, ;FK(groups - id) | 兴趣组ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 管理员ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
c++
PK: (group_id, user_id)
group_posts表(兴趣组 · 兴趣组帖子表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 帖子ID |
group_id | BIGINT, UNSIGNED, ;FK(groups - id) | 兴趣组ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 发帖者ID |
topic | VARCHAR | 帖子主题 |
content | TEXT | 帖子内容 |
view_count | INT | 浏览数量 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
group_comments表(兴趣组 · 兴趣组帖子评论表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 帖子评论ID |
post_id | BIGINT, UNSIGNED, ;FK(group_posts - id) | 帖子ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 回帖者ID |
content | TEXT | 回帖内容 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
group_replies表(兴趣组 · 兴趣组帖子评论回复表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, A_I, PK | 回帖ID |
comment_id | BIGINT, UNSIGNED, ;FK(group_comments - id) | 评论ID |
user_id | BIGINT, UNSIGNED, ;FK(users - id) | 回帖者ID |
reply_id | BIGINT, UNSIGNED, ;FK(group_replies - id) | 回帖对象ID |
content | TEXT | 回帖内容 |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
group_top_posts表(兴趣组 · 兴趣组帖子置顶表):
字段 | 类型 | 解释 |
---|---|---|
id | BIGINT, UNSIGNED, ;FK(group_posts - id) | 帖子ID |
group_id | BIGINT, UNSIGNED, ;FK(groups - id) | 兴趣组ID |
created_at | DATETIME | 创建时间 |
updated_at | DATETIME | 更新时间 |
- 界面原型与人机交互设计
“知康”个人健康WEB应用的界面和组件采用扁平化风格设计,使用绿色作为网站主色调,彰显健康的主题。界面设计以简洁易用、适合大众为原则,让用户可以很快地能够熟练使用本应用。
应用的开发使用了以下的前端框架和CSS、JS库:
-
Bootstrap 3.3.5
-
JQuery 1.11.3
-
Font-awesome 4.4.0
-
AdminLTE 2.3.2
界面的部分原型设计如图5-1至5-12所示。
图5-1 欢迎页面(welcome.html)
图 5-2 登录页面(login.html)
图5-3 注册页面(register.html)
图5-4 首页(index.html)
图5-5 健康管理首页(health.html)
图5-6 活动首页(activity.html)
图5-7 建议和文章首页(advice.html)
图5-8 朋友圈首页(moment.html)
图5-9 兴趣组首页(group.html)
图5-10 消息页面(message.html)
图5-11 个人主页(user_home.html)
图5-12 个人设置页面(setting.html)
前台界面的跳转如图5-13至5-21所示。
图5-13 前台模块跳转-总跳转
图5-14 前台模块跳转-注册登录
图5-15 前台模块跳转-健康数据
图5-16 前台模块跳转-活动
图5-17 前台模块跳转-建议(个人用户)
图5-18 前台模块跳转-建议(医生教练)
图5-19 前台模块跳转-朋友圈
图5-20 前台模块跳转-兴趣组
图5-21 前台模块跳转-个人主页
管理员后台界面的跳转如图5-22至5-28所示。
图5-22 后台模块跳转-总跳转
图5-23 后台模块跳转-用户管理
图5-24 后台模块跳转-活动管理
图5-25 后台模块跳转-文章管理
图2-26 后台模块跳转-消息管理
图5-27 后台模块跳转-朋友圈管理
图5-28 后台模块跳转-兴趣组管理
- WEB性能优化
“知康”是一款关注个人健康的Web应用,使用群体是社会中任何对此有需求的个人用户群体,为此需提供良好的用户体验,因此需要进行Web性能优化,于是设计了一套Web性能优化的方案,具体如下。
- 减少HTTP请求
这主要针对前端,将多个CSS文件和JS文件分别合并成一个,从而减少HTTP请求。
- 压缩CSS、JS文件
将CSS、JS文件进行压缩,减小文件体积大小。
- 使用压缩组件
传输之前,服务端先使用GZIP压缩再传输给客户端,客户端接收之后由浏览器解压。
- SQL语句优化
对于数据库的增删改查,要对SQL语句进行优化,以达到最高效率。
- 使用Redis或者Memcached缓存
使用Redis或者Memcached缓存以加快页面和数据访问的速度。
参考文献
- 虚拟健康社区用户生成内容主题发现及个性化推荐研究(吉林大学·王欣研)
- 人体健康评估及信息管理平台的设计与实现(山东大学·朱明贤)
- 基于.NET平台的健康服务平台研究与实现(华南理工大学·王勋)
- 一个面向亚健康社群的医疗服务平台设计与实现(华中科技大学·田俊雄)
- 高并发环境下智慧健康平台的设计与优化(河北大学·周政男)
- 基于Java EE平台的个人健康信息管理系统设计与实现(南京邮电大学·贾顺贺)
- 基于Java EE平台的个人健康信息管理系统设计与实现(南京邮电大学·贾顺贺)
- 基于EJB的J2EE实现技术研究(南京航空航天大学·夏君权)
- 基于Web2.0的求医问答网的设计与实现(电子科技大学·何一鸣)
- 人体健康评估及信息管理平台的设计与实现(山东大学·朱明贤)
- 基于J2EE技术中国残疾人远程教育系统(吉林大学·卜祥川)
- 统一用户管理系统开发与设计(南昌大学·郭妍)
- 一个面向亚健康社群的医疗服务平台设计与实现(华中科技大学·田俊雄)
- 基于推荐算法的妇幼保健服务系统的设计与实现(海南大学·潘博)
- 基于J2EE平台MVC模式的个人健康管理系统的设计与实现(南昌大学·单文英)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码工坊 ,原文地址:https://m.bishedaima.com/yuanma/36182.html