问题在于模式本身的理解,而不是具体的实现。
我已经阅读了 DAO 模式,并且出现的问题是DAO
中应该包含哪些方法?例如,
public interface UserDAO{
public User getUserById(Integer id);
public void deleteUser(Integer id);
public void updateUser(Integer id, User user);
public void createUser(User user);
}
我们可以说界面满足DAO
- 模式吗?如果没有,我应该添加/删除哪些方法?
答案 0 :(得分:4)
如果我们正在谈论更通用的方法,那么你可以选择:
public interface GenericDao<D>{
public D get(Long id);// as Id use Long instead of Integer, Ids can be very large numbers, Int can be not enough
public Collection<D> getList(SearchCriteria crit); //for retrieving more than one element
public void remove(Long id);
public void update(D entity); // remember that updated record should have already id inside, you can add assert inside
public void create(D entity); // assert that id is null
}
最后一步可以用save方法替换update / add(可选)。
你可以使用泛型,并使D实现一些具有getId()方法的接口,这将有助于为所有DAO编写一个类,作为父级,将减少你的代码:)
public interface Model implement Serializable{
Long getId();
}
在你的DAO中,你会写下这个:
public interface UserDAO <D extends Model>{
...
从这一点开始,您可以在GenericDaoImpl内部实现所有crud操作。所有你的dao,比如UserDao都会简单地扩展GenericDaoImpl,像UserDao这样的Dao接口会扩展GenericDao接口。
因此,您将在通用类中隐藏常用逻辑,并仅向某些Dao添加特定方法,例如通过电子邮件,用户名或年龄获取用户:)您的代码将更清晰,更易读。
答案 1 :(得分:1)
基本上DAO层包含与CRUD(创建,读取,更新,删除)操作相关的功能。由于您的界面主要仅包含这些功能,因此您的界面是可接受的。如果你想要通用,那么另一个答案也是好的。您还可以根据需要添加更多CRUD功能,如:
getUserByEmail(String email){}
您也可以添加这些类型的功能..