阿里云开发者学堂

开发者学训测一站式平台。平台源源不断的生产优质体系化课程、优质内容如电子书、直播、体验场景、训练营等,为开发者构建完善的学习成长体系,为开发者赋能。目前,开发者学堂包含数据库、大数据、云原生、AI、IoT等各大热门领域精品课,全部免费对开发者开放。

技术图谱:由专家组参与技术图谱的绘制与编写,知识与实践的结合让开发者们掌握学习路线与逻辑,快速提升技能 电子书:电子书由阿里内外专家打造,供开发者们下载学习,更与课程相结合,使用户更易理解掌握课程内容 训练营:学习训练营 深入浅出,专家授课,带领开发者们快速上云 精品课程:汇集知识碎片,解决技术难题,体系化学习场景,深入浅出,易于理解 技能自测:提供免费测试,摸底自查 体验实验室:学完即练,云资源免费使用

1

回答

从应用工程的生命周期来看,一个应用最大的成本是应用的总维护成本,所以代码的可维护性代表了最终成本,从长远来看统一数据访问模块的抽取可能会减少这种成本。 统一数据访问模块的抽取可以从以下几个方面提高应用系统的设计质量。 一、可维护性 当依赖变化时,有多少代码需要随之改变,如果不实现统一数据访问模块那么业务代码中势必要直接依赖数据实现类DAO,会形成事务脚本类的代码,而这种代码很难维护主要是因为以下几点: 1. 数据结构的不稳定性:DAO操作的是一个纯数据结构的类,这种类映射了数据库中的一个表。数据库的表结构和设计是应用的外部依赖,这种外部依赖随着时间的变化可能会改变,尤其是存储中间件的变更最为常见,例如MySQL变更MongoDB,又或者换一个表设计什么的。 2. 依赖库的升级:DAO类本身可能依赖MyBatis的实现,如果MyBatis未来升级版本,可能会造成用法的不同。同样的,如果未来换一个ORM体系,迁移成本也是巨大的。 二、可扩展性 做新需求或改逻辑时,需要新增或修改多少代码。如果不抽取统一数据访问模块,新需求的增加可能会直接修改业务代码或是直接修改DAO的实现,最终可能会造成大量的if-else语句,造成bug。 三、可测试性 当业务代码中强依赖了数据库等外部依赖之后,想要完整跑通一个测试用例需要确保所有依赖都能跑起来,这个在项目早期是及其困难的。在项目后期也会由于各种系统的不稳定性而导致测试无法通过。

从软件设计角度考虑,一个应用的设计是否合理,主要考查几个设计原则,统一数据访问模块的抽取可以满足这几个设计原则,从而实现高可用、高可扩展、高健壮的应用系统。 1. 单一性原则:单一性原则要求一个对象/类应该只有一个变更的原因。提问者的统一数据访问模块实际上就是实现这个原则,避免因为数据存储方式的变更或是其它数据处理中间件的变更的改变而改变。 2. 依赖反转原则:依赖反转原则要求在代码中依赖抽象,而不是具体的实现。提问者的统一数据访问模块就像是一个共享数据访问层,将具体的数据处理屏蔽在该层后面,让应用依赖统一数据访问这个抽象层。 3. 开闭原则:开放封闭原则指开放扩展,但是封闭修改。提问者的统一数据访问模块的建立可以实现在新增需求时只增加新的实现类,做到尽量不修改原有逻辑,对外部调用者透明。

jiankangbeijing 评论 0

【开发者学堂】技术圈公告

欢迎开发者们在这里讨论,提问,学习,学习课程还能获得积分,兑换社区周边好礼。

展开