第六组【团队作业】第六周作业

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import bean.User;

public class UserDao {
public boolean login(Connection connection,User user) throws SQLException
{
String sql="select * from user where ?=username and ?=password";
PreparedStatement preparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(1, user.getUsername());
preparedStatement.setString(2, user.getPassword());
ResultSet resultSet=preparedStatement.executeQuery();
if(resultSet.next())
{
return true;
}
return false;
}
public int register(Connection connection,User user) throws SQLException
{
String sql="insert into user values(null,?,?)";
PreparedStatement preparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(1, user.getUsername());
preparedStatement.setString(2, user.getPassword());
return preparedStatement.executeUpdate();
}
public int userupdate(Connection connection,User user) throws SQLException
{
String sql="update user set password=? where username=? ";
PreparedStatement preparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(1, user.getPassword());
preparedStatement.setString(2, user.getUsername());
return preparedStatement.executeUpdate();
}

}
1.概要部分
(1)代码符合需求和规格说明么?
根据代码所示,UserDao 类提供了 login、register 和 userupdate 三个方法,分别用于用户登录、注册和更新信息。这些方法都使用了 PreparedStatement 类来执行 SQL 语句,并对参数进行了安全处理,因此可以认为代码符合需求和规格说明。
(2)代码设计是否考虑周全?
UserDao 类的方法都采用了面向对象的编程思想,将用户登录、注册和更新信息的操作封装成独立的方法,提高了代码的可读性和易用性。此外,UserDao 类使用了 PreparedStatement 类来执行 SQL 语句,提高了代码的安全性。
(3)代码可读性如何?
UserDao 类的方法命名清晰,代码结构清晰,注释完整,因此代码的可读性较好。
(4)代码容易维护么?
UserDao 类的方法都遵循了面向对象的编程原则,代码结构清晰,耦合度低,因此代码易于维护。
(5)代码的每一行都执行并检查过了吗?
该段代码只是定义了对象,连接数据库,不存在逻辑错误

2.设计规范部分
(1)设计是否遵从已知的设计模式或项目中常用的模式?
UserDao 类使用了 PreparedStatement 类来执行 SQL 语句,这是一种常见的 JDBC 设计模式。此外,UserDao 类的方法都遵循了面向对象的编程原则,这也是一种常见的软件设计模式。
(2)有没有硬编码或字符串/数字等存在?
代码中没有明显的硬编码字符串或数字
(3)代码有没有依赖于某一平台,是否会影响将来的移植?
代码没有明显的平台依赖性,因此不会影响将来的移植。
(4)开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
开发者可以使用数据库来获取结果而不需要重新实现这些功能
(5)有没有无用的代码可以清除?
代码中没有明显的无用代码。

3.具体代码部分
(1)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
代码中未明确体现对错误的处理机制。建议在关键部位添加异常捕获和处理代码,例如:
在 login() 函数中,捕获并处理数据库查询可能抛出的异常。
在 register() 函数中,捕获并处理数据库插入可能抛出的异常。
在 userupdate() 函数中,捕获并处理数据库更新可能抛出的异常。
(2)参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度 ,是以0开始计数还是以1 开始计数?
代码中未明确指定参数传递方式,也没有对字符串长度单位、索引起始位置进行定义。建议遵循以下约定:
明确指定参数传递方式(例如:值传递、引用传递)。
字符串长度单位使用字节或字符,并明确说明。
索引起始位置统一使用 0 或 1,并明确说明。
(3)边界条件是如何处理的?switch语句的default分支是如何处理的?循环有没有可能出现死循环 ?
代码中未明确体现边界条件的处理逻辑。但是通常情况下,应该有相应的逻辑来处理可能的边界情况,比如数组越界、非法值等问题。
Switch语句的default分支通常会提供一个默认的行为,或者抛出一个异常,表明不应该到达该分支。
当循环的条件没有终止的时候,循环可能出现死循环。
(4)有没有使用断言(Assert)来保证我们认为不变的条件真的得到满足?
代码中未使用断言。断言可以用来验证程序中的一些基本假设,例如函数的输入参数是否符合预期,数据结构的状态是否正确等。
(5)对资源的利用,是在哪里申请,在哪里释放的?有无可能存在资源泄漏(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有优化的空间?
代码中未明确体现资源的申请和释放操作。通常情况下,资源应该在使用后立即释放,以避免资源泄漏。对于内存、文件、数据库连接等资源,应该在不再需要时及时释放。
(6)数据结构中有没有用不到的元素?
代码中未发现明显的数据结构优化空间。建议根据实际情况,考虑使用合适的数据结构提高效率,例如:
使用哈希表代替线性表,提高查找效率。
使用树形结构代替线性结构,降低插入和删除的复杂度。

4.效能
(1)代码的效能(Performance)如何?最坏的情况是怎样的?
该代码的性能可能受到以下因素的影响:
数据库查询的效率。密码加密解密的效率。数据传输的效率。在该代码中语句较少运行速度可观
最坏的情况可能复载过大导致系统运行缓慢或发生错误
(2)代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中 string 的操作是否能用StringBuilder 来优化)?
该代码中未使用循环,无可优化的部分。如果在 C# 代码中频繁操作字符串,可以使用 StringBuilder 类来优化。StringBuilder 类可以高效地拼接字符串,避免重复创建字符串对象。
(3)对于系统和网络调用是否会超时?如何处理?
该代码不涉及网络调用,不存在超时问题。若发生超时可通过设置超时时间,使用异步调用,使用重试机制等方法解决
5.代码可读性如何?有没有足够的注释?
UserDao 类的方法命名清晰,代码结构清晰,因此代码的可读性较好。该代码仅定义对象,方法,连接数据库故无注释
6.可测试性
可测试性好的方面:
方法清晰简单: UserDao 类中的每个方法都很简单易懂,功能独立,方便单独测试。
使用 PreparedStatement: 使用 PreparedStatement 防止 SQL 注入漏洞,也方便测试时替换数据。
抛出异常: 所有方法都抛出 SQLException 异常,测试时可以方便的模拟数据库异常情况。

posted @   庄东伟  阅读(14)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示