后端代码复杂度通过分拆、分而治之来解决。首先通常通过拆分工程、多个工程间可以存在依赖关系,但一定要单向依赖,不能成环,如果有环就得考虑把环形依赖部分拆分出来成为单独的工程,来解决环形依赖。

对于工程里的代码可通过横向拆分、纵向分拆来降低复杂度。横向分层按controler、service、dao、sqlmap,纵向分模块system、biz1、biz2……bizN,但在数通畅联内部,横、纵向拆分相结合模式,如下图:

java

首先通过横向分拆出controller、cxmodule、module等层次,module作为业务层根据业务功能的不同进行纵向分拆,分成analysis、dwmodel、metadata、schedule等功能模块,在各个功能模块中,横向分拆出exteral、handler、service、sqlmap,其中exteral负责数据接口,提供可调用的服务和接口;handler作为控制层,通过调度代码负责业务的调度,以及一些参数封装、结果集处理等操作;service则是负责具体业务的业务处理层,除了增删改查外,一些贴近业务的功能也会在service中完成;sqlmap用于定义操作数据库的SQL语句。

通过这种分层的方式,实现代码层次的分隔,做到各守各层、结构清晰,对于一些跨模块调用的接口,如在不同模块中需要对同一张数据表进行操作时,可以将接口提升到上层cxmodule中作为公共接口,实现类和方法的复用;对于一些可复用的、相对独立的功能,可以通过在cxmodule中定义一个干净的接口,在module的功能模块中通过实现接口实现业务逻辑,而不使用spring的事务管理机制,降低代码的复杂度。