应用服务器中的统一数据访问模块有什么用呢?
从应用工程的生命周期来看,一个应用最大的成本是应用的总维护成本,所以代码的可维护性代表了最终成本,从长远来看统一数据访问模块的抽取可能会减少这种成本。 统一数据访问模块的抽取可以从以下几个方面提高应用系统的设计质量。 一、可维护性 当依赖变化时,有多少代码需要随之改变,如果不实现统一数据访问模块那么业务代码中势必要直接依赖数据实现类DAO,会形成事务脚本类的代码,而这种代码很难维护主要是因为以下几点: 1. 数据结构的不稳定性:DAO操作的是一个纯数据结构的类,这种类映射了数据库中的一个表。数据库的表结构和设计是应用的外部依赖,这种外部依赖随着时间的变化可能会改变,尤其是存储中间件的变更最为常见,例如MySQL变更MongoDB,又或者换一个表设计什么的。 2. 依赖库的升级:DAO类本身可能依赖MyBatis的实现,如果MyBatis未来升级版本,可能会造成用法的不同。同样的,如果未来换一个ORM体系,迁移成本也是巨大的。 二、可扩展性 做新需求或改逻辑时,需要新增或修改多少代码。如果不抽取统一数据访问模块,新需求的增加可能会直接修改业务代码或是直接修改DAO的实现,最终可能会造成大量的if-else语句,造成bug。 三、可测试性 当业务代码中强依赖了数据库等外部依赖之后,想要完整跑通一个测试用例需要确保所有依赖都能跑起来,这个在项目早期是及其困难的。在项目后期也会由于各种系统的不稳定性而导致测试无法通过。
从软件设计角度考虑,一个应用的设计是否合理,主要考查几个设计原则,统一数据访问模块的抽取可以满足这几个设计原则,从而实现高可用、高可扩展、高健壮的应用系统。 1. 单一性原则:单一性原则要求一个对象/类应该只有一个变更的原因。提问者的统一数据访问模块实际上就是实现这个原则,避免因为数据存储方式的变更或是其它数据处理中间件的变更的改变而改变。 2. 依赖反转原则:依赖反转原则要求在代码中依赖抽象,而不是具体的实现。提问者的统一数据访问模块就像是一个共享数据访问层,将具体的数据处理屏蔽在该层后面,让应用依赖统一数据访问这个抽象层。 3. 开闭原则:开放封闭原则指开放扩展,但是封闭修改。提问者的统一数据访问模块的建立可以实现在新增需求时只增加新的实现类,做到尽量不修改原有逻辑,对外部调用者透明。
赞1
踩0