我试图用Java编写用户身份验证系统。所以我写了一些DAO课程。首先,我写了一个名为 Persistence 的类,它是抽象的。它负责保留一些共同的属性。并编写了一个名为User的类,扩展了 Persistence 类。这些课程是 -
public abstract class Persistance {
private Date createdDate;
private Date lastUpdatedDate;
private long version;
private boolean isDeleted;
//getter and setters
}
和用户类
public class User extends Persistance{
private String username;
private String password;
private String passwordConfired;
// getters and setters
}
我的问题是 - 编写变量名称的最佳方法是什么,哪一个是好的,创建日期或日期处理,删除或删除等等。
这种方法还可以,还是有更好的方法? 以及如何实现数据版本控制?
答案 0 :(得分:3)
要编写DAO,通常会创建一个定义DAO行为的接口。
interface MyObjDao {
public int save(MyObj myObj);
public void delete (MyObj myObj);
// as many methods as you need for data acess
}
然后创建实际的实现
class MyObjDaoImpl implements MyObjDao {
// implement methods here
}
这样做的好处是:
1)因为您定义了一个接口,所以任何测试框架都可以轻松模拟DAO 2)行为与实现无关 - 您的DAOImpl可以使用jdbc,hibernate,无论
你的Persistance
类实际上是所有实体的基类 - 即所有类实例都被保存,你想在一个地方代表一些公共字段。这是一个很好的做法 - 我不打电话给班级Persistance
,像BaseEntity
更好(恕我直言)。请务必使用javadoc来解释课程的目的。
关于变量名称,只要它们有意义并描述它们的用途,它就是好的。
所以dateCreated
或createdDate
都很好;他们都得到了这个想法。
答案 1 :(得分:2)
您正在混合DAO(数据访问对象)和VO(值对象) - 也称为DTO(数据传输对象) - 在同一个类中。
使用DAO行为接口的示例(blammy和kpow可能是webservice,oracle数据库,mysql数据库,hibernate或任何有意义的东西):
public interface UserDTO
{
boolean deleteUser(String userId);
UserVO readUser(String userId);
void updateUser(String userId, UserVO newValues);
}
package blah.blammy;
public class UserDTOImpl implements UserDTO
{
... implement it based on blammy.
}
package blah.kpow;
public class UserDTOImpl implements UserDTO
{
... implement it based on kpow.
}
示例VO:
public class UserVO
{
String firstName;
String lastName;
String middleInitial;
... getters and setters.
}
我更喜欢使用ID而不是VO对象来识别删除目标。此外,更新可能会将用户ID“smackdown”标识的目标更改为具有用户ID“smackup”,因此我通常会传递ID和VO。
答案 2 :(得分:2)
一个好的方法是使用JPA及其所有功能,这tutorial非常有用。 它解释了如何使用@PrePersist和@PreUpdate注释来设置创建和更新时间戳。 @Version注释支持乐观锁定。
答案 3 :(得分:0)
我的问题是 - 编写变量名称的最佳方法是什么 一个是好的,createdDate或dateCreated,删除或isDeleted等。
createdDate或dateCreated非常主观。在数据库中,我主要看过createdDate。在删除和isDeleted之间,我更喜欢(再次主观)删除。我认为getter方法可以命名为isDeleted()。