面向对象架构设计 - 课后作业
倒置原则
在软件架构设计上,框架层面出接口,需要使用框架的人去实现接口框架是一个稳定的对象,使用框架的业务是一个不稳定的对象,当业务不停变化的时候,不会影响到框架的稳定。这也符合Hollywood原则:“Don't call us, we'll call you."。在该原则下,框架本身应该不被底层业务系统所调用,而是让业务系统运行在框架自身基础上,在运行时被框架所调用。具体到Spring框架,也是通过暴露一些接口,让业务可以感知框架本身的一些变化(比如event listener)或者参与框架某个层面的逻辑(比如实现filter)。对于运行期而言,业务代码受限于框架代码的限制,在框架代码的框架下进行执行,对于实现业务来说,可以快速实现自己业务需求。编写业务的开发人员,也可以在业务压力下,快速开发出伸缩弹性良好的代码。
在业务开发,就三层架构来说:controller、service、dao从高到低的顺序应该是:controller → service → daocontroller更贴近于业务,所以应该是更高层的对象。service应该去实现controller的接口,但是service的方法本身也要维持单一功能,那么就需要有一个实现controller接口抽象方法的方法,在该方法中组合调用单一功能的service方法。所以从职责分离的角度来看,这里是不是应该还有一层facade,通过facade去实现controller的方法,在实现上,去调用对应service的方法,让facade和service层方法尽可能去复用(facade方法的复用,是否只可以在controller里边的调用?还是也可以出现在不同facade里边?)。
Spring Boot框架
Spring框架提供了强大的控制反转能力,对象的声明和注入都通过Spring来完成的,我们写代码的时候,所有的业务类都是交给Spring来管理的。
在收到对应请求的时候,是通过对应的path来把请求发送到我们的类代码上进行业务相关功能。
在Spring Boot启动时,Spring Boot通过SPI的机制加载factories文件,找到对应接口的实现,然后去初始化调用我们写的对应实现。
Cache
评论