一、课程设计目的
让学生以小组的形式使用java语言模拟开发微博平台的功能,让学生建立构建软件系统架构一般方法的感性认识,理解并掌握软件系统架构分析、体系结构建模与架构设计的相关理论知识,培养学生软件架构设计的基本能力,能从内部模块规划设计、系统层次结构的构建开始,了解构建系统结构的一般技术和方法。
二、课程设计内容
1.微博平台的分析工作
2.采用管道过滤器风格设计微博系统的模拟登录功能模块
3.采用c/s风格设计微博系统的模拟注册功能模块
三、课程设计过程
- 微博平台的分析
(1)研究现状:
早在2006年3月,Obvious推出了Twitter服务,这个世界上最早同时也是最著名的微博系统,而在那是,微博也仅仅只是为了给好友发送手机短信,在中国,饭否网的上线标志中国微博的开端,之后腾讯滔滔、叽歪、嘀咕等微博的开荒者终究也都没能站在最后。
2010年,我国的微博得到迅速发展,这一年,无论微博的用户还是影响力都达到前所未有的高度,以新浪门户为首的腾讯、新浪、搜狐等微博展现出全新的活力。到了2013年6月,中国微博用户规模高达3.31亿人,在微博中流动的信息有超过2亿多条。
(2)可行性分析
技术可行性分析:为了统一客户端,消除因版本升级和维护带来的复杂性,因此采用成熟的B/S架构在项目的实现上完全可行,java和j2ee体系的强大,可以让开发人员精心的构建web项目,以及一系列的开源框架,都为项目的可行性提供了强大的依据
操作可行性分析:系统使用B/S架构,用户不需要下载客户端,只需要用户有浏览器,就可以在浏览器上登陆微博系统,微博系统的界面颜值高,用户交互性高,用户操作简单方便,只需要了解基本的计算机操作就能使用,用户体验性高
经济可行性分析:微博项目可以让人们获取实时热点信息和他们所关注的信息,实时与微博信息交互。使用大量成熟技术与开源框架下,也使得小项目的开发更加简单,经济,高效,因微博而兴起的微博效应也能带来一定的经济效益。
(3)系统类的分析
前端页面:在web浏览器端,用户执行对页面上对应的业务处理例如注册时发送请求到服务器中,接收来自服务器的响应,将要显示数据展示在前台页面中,系统页面采用JSP页面,使用JavaScript+Ajax+JQuery+CSS来提高系统的交互和页面的美化。
Contrpller:在Controller层中主要用来接收浏览器请求和请求的转发,作用类似于Servlet,获取请求中的数据,调用Service层中方法就行业务处理。
Service:业务处理层:主要用来处理业务逻辑,例如登陆、注册、发微博等。
Dao:数据访问层,在Dao层接口中包含许多和数据库交互的方法。例如对具体业务的增删改查,和数据库交互的SQL语句在对应接口类的映射文件
DateBase:数据库。用来保存用户、微博、评论等信息
(4)功能模块的分析
微博系统主要包括两大模块,用户模块和管理员模块,在用户模块中又包括登陆/登出模块、用户信息模块、好友模块、微博模块这几大模块,在后台管理模块中又包含数据统计模块、用户管理模块、微博管理模块。
用户功能:登陆用户可以选择登陆或注册用户,还可以找回密码,登陆后可以修改自己的个人信息,修改用户头像和密码,编辑自己的个人主页,对微博的操作包括发布、搜索、点赞、评论、转发、收藏、删除等操作,对用户的操作有关注、取消关注、查找、拉黑、私信、取消拉黑等功能,对于海螺问题的操作有发布、查看、回答、采纳等功能。
管理员功能:管理员登陆后可以查看系统用户、微博、评论、海螺等的数量以及最近一周的增长曲线,对用户的操作有查看、搜索、封禁、解封,对微博的操作有查看、搜索、删除、恢复等功能,对海螺的操作有查看、搜索、删除、恢复等操作
(5)登录注册功能分析
当用户进入前端UI界面,可以选择登陆或注册用户,如果忘记了密码还可以通过密保问题来重置密码,如图3.1所示。
图3.1 登陆注册界面
2.管道过滤器风格设计模拟登录功能
系统整体采用了ssm框架,及使用了分层的风格设计。
表示层代码,负责接收用户界面的请求,调用业务逻辑层处理登录请求
public class LoginController {
private LoginService loginService;
public LoginController(LoginService loginService) {
this.loginService = loginService;
}
public void handleLoginRequest(String username, String password) {
User user = new User(username, password);
loginService.login(user);
}
}
数据访问层,负责与数据库交互,验证用户身份
public class UserRepository {
public User getUserByUsername(String username) {
// 模拟数据库查询用户
// 实际应用中需要连接数据库进行查询
return new User("exampleUser", "password123");
}
}
业务逻辑层负责处理登录逻辑,使用管道过滤器处理登录逻辑
public class LoginService {
private FilterManager filterManager;
public LoginService(FilterManager filterManager) {
this.filterManager = filterManager;
}
public void login(User user) {
// 使用管道过滤器处理登录逻辑
filterManager.executeFilters(user);
}
}
过滤器接口,定义过滤器的执行方法,具体过滤器类,用于验证用户名和密码
public interface Filter {
void execute(User user);
}
public class PasswordValidationFilter implements Filter {
@Override
public void execute(User user) {
// 省略密码验证的逻辑,例如检查密码强度
System.out.println("验证密码通过");
}
}
public class UsernameValidationFilter implements Filter {
@Override
public void execute(User user) {
// 省略用户名验证的逻辑,例如检查用户名是否合法
System.out.println("验证用户名通过");
}
}
过滤器管理器,管理过滤器的执行顺序
public class FilterManager {
private List<Filter> filters = new ArrayList<>();
public void addFilter(Filter filter) {
filters.add(filter);
}
public void executeFilters(User user) {
for (Filter filter : filters) {
filter.execute(user);
}
}
}
3.采用c/s风格设计微博系统模拟注册功能
前端通过一个简单的HTML表单,使用JavaScript发送POST请求到注册接口,后端使用SSM框架实现了一个简单的用户注册功能。
控制层(Controller)
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/register")
public String registerUser(@RequestBody User user) {
try {
userService.registerUser(user);
return "Registration successful!";
} catch (Exception e) {
e.printStackTrace();
return "Registration failed. Please check your information.";
}
}
}
持久层dao
public class UserDao {
void registerUser(User user);
}
UserDao.xml中作与数据库的交互功能。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="UserDao">
<insert id="registerUser" parameterType="User">
INSERT INTO users (username, password) VALUES (#{username}, #{password})
</insert>
</mapper>
业务层Service,处理业务逻辑,包括用户注册逻辑,并调用Dao层进行数据库操作。
public interface UserService {
void registerUser(User user);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void registerUser(User user) {
// 在实际应用中,这里应该包含验证等注册逻辑
userDao.registerUser(user);
}
}
}
用户在Web浏览器中访问注册页面(register.html),并通过填写表单,使用JavaScript的fetch函数向后端发送POST请求。
后端(服务器端)中UserController 接收POST请求,调用UserService处理注册逻辑。UserService 调用UserDao进行数据库操作,完成用户注册。最后数据库存储用户信息。注册成功。
四、结果与分析
通过本次课程设计,我使用了分层、c/s和管道过滤器风格去完成设计微博平台的部分仿真功能,本次系统设计采用ssm框架去进行设计,整体采用层次结构,在通过管道过滤器风格设计登录功能并通过过滤器去验证用户名和密码的时候,我们发现使用过滤器去模拟登录功能,很方便程序的扩展和重用,但是可能会影响到一些性能,另外亦有可能增加了程序的复杂度。而基于c/s风格设计的注册功能也有缺点,特别是客户端和服务端的兼容性问题。所以在软件设计过程中选择合适的风格模式去设计功能极其重要。