我有这个抽象类,我已经定义了一些实现数据库操作的方法(获取行,插入,删除等)
现在我想创建将返回一些行(即整个表)的方法,但是我希望它返回相应的模型类而不是域类(它基本上与域相同但没有关系列表和其他一些东西我不需要表示层).
抽象类是
public abstract class DomainService {
protected abstract Logger getLogger();
protected final Validator validator;
protected DomainService() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
this.validator = factory.getValidator();
}
abstract public void insert(T object) throws ValidationException;
abstract public void delete(T object) throws EntityNotFoundException;
abstract public List fetchAll();
}
我想添加另一个方法,它将调用fetchAll()然后迭代每个项目并创建等效的模型并返回该列表.
public List fetchAllModels(Class modelClass) {
List domains = fetchAll();
List models = new ArrayList(domains.size());
for ( T domain : domains) {
K model = modelClass.newInstance();
models.add(model.fillIn(domain));
}
return models;
}
忽略这是我刚刚编写问题的代码,是否可以为类中未定义的泛型添加参数. IMO一个类可以有返回其他数据类型的方法,所以它应该不是问题.在我的情况下,我传递了类,所以我可以创建模型的实例,然后使用域来填充成员.我有两个意见,
>我写的那个,我在模型类中添加一个方法,从域对象创建它自己.我在考虑一个构造函数,它将域对象作为参数,但我认为使用泛型调用构造函数有点麻烦(它至少需要反射实用程序)所以我想要一个方法来填充使用默认构造函数创建实例后的详细信息.此外,模型位于更高层,我认为更高层应使用更低层(数据库 – >域类 – >访问类(DAO) – >服务类 – > Servlet类—-> JSP显示数据)
>我可以向域类添加一个方法,将域转换为其模型并调用它而不必传递模型的类
public List fetchAllModels() {
List domains = fetchAll();
List models = new ArrayList(domains.size());
for ( T domain : domains) {
models.add(domain.createModel());
}
return models;
}
但我觉得域类应该像数据库中的表一样干净,只有与列有关的方法.
在类上添加参数会更好吗?我只会用它来做这个方法……
任何想法评论总是欢迎