项目展示:

登陆注册:

视频、我的、国际:

娱乐、军事:

体育、科技:

手机、电影:

开发工具:

前端:HUAWEI DevEco Studio(3.1Release 3.1.0.500)。

后端:IDEA(2024.1)。

数据库:Navicat Premium 16。

相关技术:

编程语言:Java8、Arkts(api9.0)、SQL。

网络请求库:@ohos.net.http(用于网络请求和数据解析)

数据库操作库:@ohos.data.relationalStore(用于本地数据库操作)

服务器环境:Spring Boot2.6.7内置Tomcat

前端框架:HarmonyOS的ArkUI
————————————————

需求分析
1、功能需求
用户注册:提供注册表单,要求用户输入用户名、密码。

用户登录:提供登录表单,要求用户输入用户名和密码。登录成功后,为用户创建会话(session)并保存登录状态。

新闻列表展示:按照时间顺序或热度排序展示新闻列表,每条新闻包含标题、摘要、发布时间、来源等信息。

新闻详情查看:点击新闻列表中的某条新闻,进入新闻详情页面,展示新闻的详细内容、图片、视频等多媒体信息。

分类浏览:支持按照新闻类别进行新闻浏览。

个性化新闻推荐:根据用户的阅读历史、兴趣爱好等信息,为用户推荐相关新闻。

支持用户设置兴趣标签,用于更精确地推荐新闻。

展示推荐新闻列表,用户可以直接点击阅读。

用户评论与互动:在新闻详情页面下方,提供用户评论区域,允许用户发表评论并查看其他用户的评论。

支持用户之间的点赞、回复等互动操作。

对评论进行审核,防止恶意言论和广告信息的发布。

用户个人中心:用户信息管理:允许用户查看和编辑自己的个人信息,如用户名、电子邮箱、密码等。

阅读历史记录:展示用户的阅读历史记录。

订阅管理:允许用户订阅或取消订阅特定的新闻类别或话题,以便接收相关新闻的推送。

收藏夹管理:提供收藏夹功能,允许用户将感兴趣的新闻添加到收藏夹中,方便后续查看。

消息通知:展示系统发送给用户的消息通知,评论回复、新闻推送。

设置与偏好:允许用户设置系统偏好,新闻推送频率、界面主题等。

浏览视频:视频列表展示:提供视频分类浏览,展示各类视频列表,包括视频标题、缩略图、发布时间等信息。

视频详情查看:点击视频列表中的某个视频,进入视频详情页面,播放视频内容,并展示视频描述、标签、相关视频等信息。

2、非功能需求
性能:快速响应用户请求:确保系统能在短时间内处理用户请求并返回结果,减少用户等待时间。

负载均衡:通过负载均衡技术,将用户请求分发到多个服务器上,提高系统处理能力和响应速度。

缓存机制:使用缓存技术(如Redis)缓存热点数据和静态资源,减少数据库访问次数和网络传输开销。

安全性:用户数据保护:对用户密码进行加密存储(如使用哈希算法),防止密码泄露。

防止SQL注入:对用户输入进行过滤和转义,防止SQL注入攻击。

HTTPS协议:使用HTTPS协议进行数据传输,确保数据在传输过程中的安全性。

访问控制:对系统资源进行访问控制,确保只有授权用户才能访问敏感信息。

可维护性:模块化设计:将系统拆分为多个模块,每个模块负责一个或多个功能点,降低模块之间的耦合度,提高代码的可维护性。

日志记录:记录系统运行过程中的关键信息(如用户操作、错误日志等),方便后续问题排查和性能优化。

文档编写:编写详细的设计文档和使用手册,方便开发人员和运维人员了解系统架构和操作流程。

接口设计:设计良好的API接口方便其他系统或应用调用本系统功能。

微服务架构:采用微服务架构,将系统拆分为多个独立的服务,每个服务负责一个或多个业务功能,提高系统的可扩展性和可维护性。

容器化部署:使用Docker等容器技术,实现应用的快速部署和迁移。
————————————————

功能模型
用例图:

用例描述:
(1)用户注册

参与者:用户

前置条件:用户未注册

后置条件:用户成功注册

主事件流:

a用户填写注册信息

b系统验证信息

c用户注册成功

替代事件流:信息验证失败,注册失败

(2)用户登录:

参与者:用户

前置条件:用户已注册且拥有有效的账号

后置条件:用户成功登录系统

主事件流:

a 用户打开登录页面。

b 用户输入用户名和密码。

c系统验证用户提供的凭据。

d如果凭据有效,系统向用户授予访问权限,用户成功登录。

e系统显示用户登录成功的消息,并跳转到用户个人资料或主页。

替代事件流:

3a. 如果用户输入的凭据无效,系统显示错误消息并要求用户重新输入。

4a. 如果系统验证失败次数达到上限,系统锁定用户账号并提示用户联系支持团队。

(3)浏览新闻:

参与者:用户

前置条件:用户已成功登录系统

后置条件:用户完成新闻浏览并可以选择其他操作

主事件流:

a用户进入新闻浏览页面。

b系统显示新闻列表,包括标题、摘要和发布日期等信息。

c用户浏览新闻列表并选择感兴趣的新闻。

d系统显示所选新闻的详细内容。

e用户阅读新闻内容。

f用户可以选择返回新闻列表继续浏览或执行其他操作。

替代事件流:

1a. 如果用户未登录系统,系统要求用户先进行登录操作。
————————————————

动态模型
1、脚本: 编写典型交互行为的脚本。

2、顺序图:

3、状态图:

状态描述:

未注册状态:用户尚未在系统中创建账户。

转换事件:用户成功注册后,进入“已注册状态”。

已注册状态:用户已经在系统中创建账户,但尚未登录。

转换事件:用户输入正确的用户名和密码后,进入“已登录状态”。

转换事件:用户注销后,返回“未注册状态”。

已登录状态:用户已经登录到系统,可以执行登录后的操作(如浏览新闻、发表评论等)。

转换事件:用户注销后,返回“已注册状态”。

用户界面设计
用户界面(UI)设计是软件开发过程中至关重要的环节,旨在为用户提供直观、易用、美观的交互界面。以下是用户界面设计的详细描述,包括设计原则、设计流程、设计工具和用户界面测试。

设计原则

用户界面设计应遵循以下基本原则,以确保用户体验的质量:

用户中心设计:设计应以用户需求和使用习惯为中心,确保界面易于理解和操作。

一致性:界面元素和交互方式应在整个系统中保持一致,避免用户混淆。

简洁性:界面应简洁明了,避免不必要的复杂性和信息过载。

设计流程

用户界面设计通常包括以下几个步骤:

需求分析:与用户和利益相关者沟通,了解用户需求和业务目标

信息架构:设计系统的信息架构,确定信息的组织方式和导航结构。

线框图:绘制线框图,展示界面的基本布局和功能结构。

视觉设计:在线框图的基础上进行视觉设计,确定界面的颜色、字体、图标等视觉元素。

原型设计:制作高保真原型,模拟真实的用户界面和交互方式。

用户测试:进行用户测试,收集用户反馈,迭代改进设计。

需求分析:

用户需求:用户希望能够方便地浏览和搜索新闻,阅读新闻详情,发表评论。

业务目标:增加用户粘性,提高页面浏览量和用户互动。

线框图:

首页线框图:

顶部导航栏:新闻分类、搜索框、用户登录/注册

主内容区:热门新闻轮播图、最新新闻列表

底部:版权信息、友情链接
————————————————

面向对象设计(OOD)


引言:
设计阶段的目标是将项目需求转化为详细的设计文档和原型,为后续的开发提供明确的指导。通过系统的设计方法,确保系统结构合理、模块划分明确、接口清晰,从而提升开发效率和系统可维护性。常用的方法包括需求分析、概念设计、细化设计、原型开发、设计评审和文档编制。

体系结构设计:

总体设计:

·用户界面层:负责用户与系统的交互。

·业务逻辑层:处理业务逻辑和数据运算。

·数据访问层:负责与数据库交互,执行数据存取操作。

·基础设施层:提供系统运行所需的基础设施服务,如日志、缓存等。

架构图:


————————————————

详细设计:

类设计:

uesr类:

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("user")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 用户id
     */
    @TableId(value = "user_id", type = IdType.AUTO)
    private Long userId;
    /**
     * 用户昵称    用户昵称
     */
    @TableField("user_name")
    private String userName;
    /**
     * 手机号(账号)
     */
    @TableField("phone")
    private String phone;
 
    /**
     * 密码
     */
    @TableField("password")
    private String password;
    /**
     * 头像
     */
    @TableField("avatar")
    private String avatar;
    /**
     * 用户性别(0代表女1代表男)
     */
    @TableField("sex")
    private Integer sex;
    /**
     * 创建时间
     */
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    /**
     * 更新时间
     */
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime  updateTime;
}

UserDetail:

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("user_detail")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserDetail implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @TableId("id")
    private Long id;
    /**
     * 用户id
     */
    @TableField("user_id")
    private Long userId;
    /**
     * 用户ip信息
     */
    @TableField("ip")
    private String ip;
    /**
     * 个性签名
     */
    @TableField("description")
    private String description;
    /**
     * 生日
     */
    @TableField("birth_day")
    private Date birthday;
    /**
     * 学校
     */
    @TableField("school")
    private String school;
    /**
     * 职业
     */
    @TableField("profession")
    private String profession;
    /**
     * 关注数量
     */
    @TableField("follow")
    private Long follow;
    /**
     * 粉丝数量
     */
    @TableField("fans")
    private Long fans;
    /**
     * 获赞数量
     */
    @TableField("received_likes")
    private Long receivedLikes;
    /**
     * 创建时间
     */
        @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime createTime;
 
    /**
     * 更新时间
     */
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime  updateTime;
}

News:

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("news")
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class News implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 发布的用户id
     */
    @TableField("user_id")
    private Long userId;
 
    /**
     * 新闻类型
     */
    @TableField("new_type_id")
    private Long newTypeId;
    /**
     * 内容
     */
    @TableField("content")
    private String content;
 
    /**
     * 图片地址
     */
    @TableField("img")
    private String img;
    /**
     * 发布时间
     */
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime  createTime;
    /**
     * 修改时间
     */
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime  updateTime;
    /**
     * 新闻简介
     */
    @TableField("description")
    private String description;
}

NewsType:

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("news_type")
public class NewsType implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
      @TableId("id")
    private Long id;
    /**
     * 新闻类型
     */
    @TableField("type_name")
    private String typeName;
    /**
     * 创建时间
     */
        @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime  createTime;
    /**
     * 更新时间
     */
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime  updateTime;
}
 

NewsMark:

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("news_mark")
public class NewsMark implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
      @TableId("id")
    private Long id;
    /**
     * 用户id
     */
    @TableField("user_id")
    private Long userId;
    /**
     * 新闻id
     */
    @TableField("news_id")
    private Long newsId;
    /**
     * 标记类型(0分享,1评论,2点赞,3收藏)
     */
    @TableField("mark_type")
    private Integer markType;
    /**
     * 状态(0标记,1取消)
     */
    @TableField("status")
    private Integer status;
    /**
     * 创建时间
     */
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime  createTime;
    /**
     * 更新时间
     */
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime  updateTime;
}


 

设计模式:

单例模式:用于全局配置管理。

工厂模式:用于实例化不同类型的用户对象(如普通用户、管理员)。

观察者模式:用于实现用户对文章评论的实时更新通知。

策略模式:用于对不同类型的新闻做不同类型的处理策略。

适配器模式:用于快速构建想要的返回对象

面向对象实现(OOP)
引言:

在实现阶段,我们的目标是将设计阶段规划的系统架构、类和模块具体化为可执行的代码。技术栈选择基于以下考虑:

·编程语言:Java

·工具:Maven(项目管理)、Git(版本控制)、IntelliJ IDEA(集成开发环境)

·框架:Spring Boot(构建应用程序)、MyBatis-plus(数据库持久化)

·存储服务:Minio(OSS存储服务)

·数据库:Mysql(数据存储)、Redis(缓存)

·依赖库:Lombok(简化实体类开发)、hutool(提供大量便于开发的工具、例如MD5加密)、knife4j(用于生成接口文档)、validation(参数校验)等......

全部依赖如下:

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐