UserFactory类
UserFactory我为了达到除了一些类当中的get和set方法之外的,与外部有联系的唯一的一个类的效果。所以一些和初衷(这个类只是处理User和其他类的组装)相背的方法也写入到了这个类当中。
当然写个网站我还刚刚开始。这些方法不可能都很实用。所以以后还要扩展。
整个用户系统的源代码可以再附件中得到。
/**
这是我写的第一个方法。主要是通过用户名,密码来获取一个User。很多关于User的很多想法也是在这个类中慢慢的成熟的。概括下来为以下这几点。
首先,User分为简短的完整的区别。这当然还是基于一些实际的估计,因为User很多时候只是一个身份的标识,而得user类定位在是一个用户的代表,所以就想到了区别。但是实现起来的方法还是比较原始,这里就不说了。当让希望以后能够用到代理的想法。
*/
public User getUserByName (String username,String password)
throws UserNotExistException, //用户不存在错
PasswordWrongException, //密码不对错
RoleWrongException{ //权限不错在错
/**
* 添加一个用户,在这里,你也可以看到参数都是对象
* 在写这个方法的最开始,我也想过就是提供一些基本的个人信息做为参数,比方说,我就建了个参数有用户名,密码和userinfo的方法。而这个方法调用哪个方法。
* 但是最后放弃了。因为那样不OO,最近在看《代码大全》。在里面学到了一个叫做抽象数据(具体的名字忘了)的概念。我的理解应该是把数据当成一个对象来进行思考,而不是基本的数据。因为对象相对于数据有着更不容易变化的特性。* 比方说这里,现在有User类有ID(数据库自动生成),name和password(由于我把password的set的作用域写成了default,无法包外调用,所以这里只好当做参数传入)。那么现在看似那个方法比较可行。但是如果说日后,我打算往User里 * 加入其它参数呢?就需要一个新的函数。可能调用它的所有方法都需要改。但是如果我把它当成一个User,那显然方便了很多。
*/
public boolean storeUser(User user,UserInfo userinfo,String password)
/**
* 这个类的作用就是用数据库中的数据,初始化user里的userinfo属性。
其实这里的这个方法我觉得比较容易放入infoutils这个类中,但是呢,最后我还是把它放在了这里。因为我觉得,userfactory应该是唯一和外界交互的一个类。
这个方法,在实际操作的时候,我写了一个Transaction类来实现数据库的事务。
* @param user
*/
public void iniUserInfo(User user)
/**
* 作用同上,如果细心,可以发现这个方法会抛一个异常。而在初始化信息的时候则不会。因为我觉得,一个用户的肯定有一个角色,如果找不到,那么就是出错。但是一个用户可以没有详细的信息。
* @param user
* @throws RoleWrongException
*/
public void iniUserRole(User user) throws RoleWrongException{ //权限装载出错
/**
* 判断用户是否存在,
* @param username
* @return boolean ture为该用户存在 false为该用户不存在
*/
public boolean userExist(User user)
/**
* 因为有些用户需要在外面装配么,需要一个空的userInfo类。这里出去的userInfo类的id已经获得了一个UUID
* @return
*/
public UserInfo getEmptyInfo()
/**
* 作用同上面那个方法。
* @return
*/
public User getEmptyUser()
/**
* 测试密码是否为这个用户的
* @param user 被测试的用户
* @param password 测试的密码
* @return 一致,则为true,反之则为false
*/
public boolean checkPassword(User user,String password)
/**
* 删除用户
* @param user
*/
public void deleteUser(User user)
/**
* 更改密码
* @param user
* @param newpassword
* @return 修改成功返回true,反之则为false
*/
public boolean ChangePassword(User user,String newpassword)
/**
* 修改个人信息。
* @param user
* @return
*/
public boolean modifyinfo(User user)