SRP和LSP在架构中的具体应用

在ssh构架的后台应用中,我们将应用分为model层,service层,dao层,这是一个SRP原则的具体实现,每一个层的职责单一化,逻辑更清晰,层与层之间分开,类与类之间耦合度低,功能的复用性得到提高。

dao层的底层接口 BaseDao 里提供了持久层数据操作增删改查的的具体方法 ,用范型传递要操作的实例所属类型。在service层调用dao层的实例来完成数据持久操作。这里有一个问题,就是service层中的BaseDao 成员实例化的问题,没有办法用autowire自动装配,因为BaseDao有了多实现,无法在BaseService实现类里自动装配一个BaseDao实例。解决办法是,在具体的ServiceImpl类代码中自动装配具体的Dao实例,这个Dao实例要继承BaseDao,然后在PostConstruct时调用BaseServiceImpl提供的setBaseDao方法将BaseDaoImpl的子类对象为BaseServiceImpl 的 BaseDao属性赋值。

@PostConstruct

public void init(){

this.setBaseDao(xxxDao);

}

这里体现了LSP原则,基类存在的地方,都可以用具体的子类的来替换,此为里氏替换原则。

你可能感兴趣的:(SRP和LSP在架构中的具体应用)