在ssh构架的后台应用中,我们将应用分为model层,service层,dao层,这是一个SRP原则的具体实现,每一个层的职责单一化,逻辑更清晰,层与层之间分开,类与类之间耦合度低,功能的复用性得到提高。
dao层的底层接口 BaseDao<T> 里提供了持久层数据操作增删改查的的具体方法 ,用范型传递要操作的实例所属类型。在service层调用dao层的实例来完成数据持久操作。这里有一个问题,就是service层中的BaseDao<T> 成员实例化的问题,没有办法用autowire自动装配,因为BaseDao<T>有了多实现,无法在BaseService<T>实现类里自动装配一个BaseDao实例。解决办法是,在具体的ServiceImpl类代码中自动装配具体的Dao实例,这个Dao实例要继承BaseDao,然后在PostConstruct时调用BaseServiceImpl提供的setBaseDao方法将BaseDaoImpl的子类对象为BaseServiceImpl 的 BaseDao属性赋值。
@PostConstruct
public void init(){
this.setBaseDao(xxxDao);
}
这里体现了LSP原则,基类存在的地方,都可以用具体的子类的来替换,此为里氏替换原则。
网友评论