【发布时间】:2019-02-10 19:00:57
【问题描述】:
对于每个实体,我都在制作控制器、服务和 DAO。我现在有大约 8 个带有这些类的实体。以我的课程Categorie 和Product 为例。
类 CategorieDaoImpl 实现来自 CategorieDao 的方法
@Override
public boolean insertCategorie(Categorie categorie) {
Session session = null;
try {
session = super.getConnection();
session.getTransaction().begin();
session.save(categorie);
session.getTransaction().commit();
return true;
} catch (HibernateException e) {
e.printStackTrace();
return false;
} finally {
closeConnection(session);
}
}
类 ProductDaoImpl 实现来自 ProductDao 的方法
@Override
public boolean insertProduct(Product product) {
Session session = null;
try {
session = super.getConnection();
session.getTransaction().begin();
session.save(product);
session.getTransaction().commit();
return true;
} catch (HibernateException e) {
e.printStackTrace();
return false;
}
finally {
closeConnection(session);
}
}
如您所见,这两个类的代码非常相似,除了参数和save()的参数。
Intellij 告诉我这是重复代码,但是当重复代码在类中时,它并没有像通常那样为我提供解决方案。知道如何解决这个问题并让它变得更好吗?
提前致谢。
编辑:
大多数 Dao 类具有相同的 CRUS 方法:get、insert、update、delete。大多数情况下,只是参数不同。
【问题讨论】:
-
通常有两种方法: 将公共代码放入一个公共基类中,您的类从该基类扩展。或者将通用代码放入另一个类并在您的类中使用该类的实例。尝试使用第二种方法(优先组合而不是继承)。除此之外:过于宽泛和/或基于意见。
标签: java duplicates code-duplication