介绍
我试图在Java中的相当复杂的结构,接口,抽象类和泛型。 经与仿制药的使用和创建良好的面向对象设计,只有平均经验没经验,这是开始证明相当大的挑战。
我有一些感觉,我想要做的实际上不能做,但我能足够靠近它。 我会努力,我可以解释它简短。 我只是要告诉直线距离,这种结构将代表我的DAO和服务层来访问数据库。 使这一问题更加抽象只会变得更加困难。
我DAO层是完全没问题,因为它是。 有一个通用的DAO接口,并为每个实体,也就是扩展了通用的一个,并在泛型类型填补了DAO接口。 此外,还有由每个DAO实现,进而实现相应的接口扩展的抽象类。 对于最有可能混淆读,所以这里显示了DAO的产品为例图:
现在的服务类,我心中有一个类似的结构。 大多数在服务类映射到DAO方法的方法呢。 如果你有以上的“服务”图中的每一个替换“道”,你对我的服务层的基础。 但有一两件事,我想做的事情,基于下面的想法,我有:
每个服务类的实体将至少获得一个DAO对象,它是专为实体即DAO。
这是...
问题/问题
如果我可以做一个适当的面向对象的设计, 使每个服务类有各自的实体的DAO对象我的服务层将是完美的一个实例变量 ,在我看来。 此建议是值得欢迎的,万一我的设计也不是那么好,因为它看起来。
我已经实现了它这样的:
类AbstractService
public abstract class AbstractService<EntityDAO> {
EntityDAO entityDAO;
public AbstractService() {
entityDAO = makeEntityDAO(); //compiler/IDE warning: overridable method call in constructor
}
abstract EntityDAO makeEntityDAO();
}
类ProductServiceImpl
public class ProductServiceImpl extends AbstractService<ProductDAOImpl> {
public ProductServiceImpl() {
super();
}
@Override
ProductDAOImpl makeEntityDAO() {
return new ProductDAOImpl();
}
}
这种设计的问题是一个编译器警告我不喜欢:它在构造函数中重写方法调用 (见注释)。 现在,它的设计是重写的,其实我强制执行,以确保每个服务类有相应的DAO的引用。 这是我能做到的最好的事情?
我已经做了我的绝对最好的,包括所有你可能需要的,只有你需要什么这个问题。 所有我现在要说的是,意见,欢迎和广泛的答案,甚至更多, 感谢你的时间阅读。
在计算器上其他资源
了解服务和DAO层
DAO和服务层(JPA /休眠+春季)