rooobot / architecture-training

Architecture training camp homework
0 stars 2 forks source link

架构师训练营-第二周作业2 #4

Open rooobot opened 4 years ago

rooobot commented 4 years ago

问题:请描述一个你熟悉的框架,是如何实现依赖倒置原则的。

答:

最常见的应该是dao的设计了,相对于具体的数据库而言,dao层属于更高层,所以dao的设计不应该依赖于具体的数据库实现,如MySQLh2等。

通常dao会设计为一组接口,每个接口里有一组与某个类的存储相关的方法声明,在系统上线时,业务代码调用dao层读写数据时,假设是使用MySQL数据库,那么,程序在加载时,会从classpath中读取MySQL数据库的驱动,并建立MySQL数据库的连接池,这样业务代码在调用dao的接口时,持久层框架就会执行对应配置好的数据库的SQL操作语句,这样就能正确的读写数据库了。

同时,为了支持单元测试,我们在测试时,一般使用h2之类的内存数据库,所以在测试环境的profile下,我们只需要在classpath加载h2数据库的驱动,在测试代码启动时,会加载h2数据为库的驱动(具体的实现是JDBCSPI机制),然后在执行测试用例时,就能正确的在h2中读写数据了。

这里的两个场景:测试用例场景和线上业务代码场景,使用的是不同的数据库(MySQLh2),而我们的代码只有dao的接口,持久层框架(如MyBatis)框架的会通过JDBCSPI机制加载数据库的驱动,然后执行对应配置好的数据库的SQL操作语句,从而正确的在不同场景下实现对不同数据库的读写操作。