美文网首页一篇就够
一篇就够 | 教你用maven搭建自己的开发框架

一篇就够 | 教你用maven搭建自己的开发框架

作者: 朦胧夏月凉 | 来源:发表于2020-05-05 19:39 被阅读0次

    这篇文章先会讨论什么是"框架",然后向你展示一个基于 maven 特性搭建的自制开发框架与该框架的使用示例,最后将这个自制框架的搭建过程整理给你。这篇文章适用于对maven有足够了解的读者,如果你还不认识maven,欢迎阅读我的另一篇文章:

    一篇就够 | 快速理解什么是maven

    内容预览:

    • 讨论什么是“框架”
    • 展示一个简单的基于 maven 特性搭建的自制框架
    • 展示上述自制框架的使用示例
    • 自制框架的搭建过程

    一、什么是框架

    概念

    笔者认为,所谓的框架,是指一套抽象的规范,符合某一框架的规范,则可称为使用了这一框架或者基于这一框架。

    举个例子,maven项目要求在根路径有一个配置文件 pom.xml,还要求项目源代码、项目测试代码、项目静态资源必须放置到指定的目录里;再举个例子,Spring项目需要定义或配置各种bean,注册到容器里的bean,可以被依赖注入注解来管理使用,完成IoC;最后再举个例子,MybatisORM框架,一方面需要通过配置文件指代清楚mapper代码类所在的位置,一方面要在配置好的静态文件目录。

    框架有轻重之分,所谓轻量级的框架,是指使用框架与不使用框架的区别并不明显,框架规范对传统开发侵入性低;而重量级的框架则相反,框架规范对传统开发的侵入性高,使用框架与不使用框架的区别很明显。

    二、自制框架 - zty-framework

    作用概述

    zty-framework 属于轻量级框架,完全基于 maven 项目框架的特性对 Spring 框架进行封装,为不同种类的开发项目提供与项目类型对应的整套 Spring 依赖,并且还定义了一套专有的规范。主要功能如下:

    1. 简化 Spring 项目搭建过程。按功能类型封装常用功能依赖包,统一管理,对外提供完整的"依赖包套餐"。只需引入 zty-framework 的相应模块,即可完成对某一功能类型所需的所有依赖包的导入过程,既避免了重复引入依赖的人工操作,也大大减少修改依赖引入所需的工作量。
    2. 定义规范,减少重复工作,提升开发效率,改善开发质量。针对绝大多数开发场景,zty-framework 抽象出了一套通用的参数规范、异常信息规范和注解规范。开发者遵从这些规范进行开发,可以很方便地完成统一参数校验、统一异常处理,既减轻了工作量,也改善了开发质量。

    如果将 Spring 框架的各部分内容比喻成小积木的话,那么 zty-framework 的各部分内容则可以理解为——由几个小积木组建成的模块。

    框架内容展示

    首先是 zty-framework 的目录结构图:

    zty-framework 目录结构

    对于负责统一实现并管理实体类、通用类(公共类)、工具类的模块,zty-framework 抽象出了 framework-common,其他项目只需引入 framework-common 依赖,即可完成所需依赖包的导入。framework-common 的 maven 依赖图如下:

    framework-common 依赖图

    zty-framework 的规范类,在 framework-common 里面进行了实现。分别是这四部分:1)框架自定义注解;2)框架规范参数类;3)框架异常规范类;4)框架工具类。如果需修改这些内容,只需在 framework-common 里进行修改即可。

    framework-common 内容

    对于负责实现与数据库交互、完成业务功能的模块,zty-framework 抽象出了 framework-bo(BO表示Business Object,这里指业务对象层),其他项目只需引入 frame-bo 即完成了对所需依赖的导入。framework-bo 的 maven 依赖图如下:

    framework-bo 依赖图

    对于负责对外提供API接口、接口处理的模块,zty-framework 抽象出了 framework-web,其他项目只需引入 frame-web 即完成了对所需依赖的导入。framework-web 的 maven 依赖图如下:

    framework-web 依赖图

    对于按实际需要集成各模块、生成可部署项目的模块,zty-framework 抽象出了 framework-springboot-app 模块,maven 依赖图如下:

    framework-springboot-app 依赖图

    以上只是笔者搭建的示例,framework 各模块的依赖可以按需选择、调整。

    使用示例

    以实际项目中“账号模块”的实现作为 zty-framework 的使用示例,带你更近一步感受 zty-framework 的便利。

    首先是创建负责定义公用实体类的 account-common 模块,引入 framework-common 依赖:

    account-common 依赖图

    account-common 的实体类包括数据对象类(DO)和数据传输对象类(DTO),其中DO表示数据库表结构相对应的实体类,DTO表示用于传输的字段脱敏后的类,POJO命名遵从阿里巴巴开发规范

    account-common 内容

    第二步是创建负责完成与数据库交互的 account-bo 模块,引入 framework-bo 和 account-common 依赖:

    account-bo 依赖图

    account-bo 模块的内容主要包括DAO类和Service类,如果业务涉及到复杂流程的实现,还可以基于Service类提供的方法,实现API类:

    account-bo 内容

    第三步是创建负责提供 http 接口的 account-web 模块,引入 framework-web 和 account-bo 依赖:

    account-web 依赖图

    account-web 主要实现 Controller 类,完成参数检查,调用 bo 层的接口方法实现功能:

    account-web 内容

    最后一步,结合实际需求,对各个功能模块进行集成,搭建一个可部署的项目。这里的 service-customer 模块引入了"账号管理模块"、"微信授权模块"、"文件管理模块"和"缓存管理模块"的依赖,当然还有 framework-springboot-app,完整依赖图如下:

    service-customer 依赖图

    各个其他模块的功能,皆已在各模块内完成了实现,service-customer 只需基于 Spring AOP 按业务需求完成统一参数处理和统一异常处理即可:

    service-customer 内容

    搭建过程

    1. 创建 maven 空工程,命名为 framework;
    2. 将工程 framework 的 pom.xml 的<packaging>改为pom
    3. 在工程 framework 的 pom.xml 里定义框架的子模块,声明到 <modules> 里;

    前3步的pom.xml完整代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
              http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <!-- 定义基本信息 -->
        <artifactId>framework</artifactId>
        <groupId>com.zty</groupId>
        <version>${zty-framework.version}</version>
    
        <!-- 父模块必须设置为此 -->
        <packaging>pom</packaging>
    
        <!-- 集中版本管理 -->
        <properties>
            <zty-framework.version>0.1.1</zty-framework.version>
        </properties>
    
        <!-- 声明子模块 -->
        <modules>
            <module>framework-common</module>
            <module>framework-web</module>
            <module>framework-bo</module>
            <module>framework-springboot-app</module>
        </modules>
    </project>
    
    1. 分别创建框架子模块 framework-common、framework-bo、framework-web 和 framework-springboot-app,并在<parent>标签里使他们继承于 framework;
    2. 在相应的模块里引入依赖;
    3. 如果需要,实现相应模块的代码类;

    framework-common 的 pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
              http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>framework</artifactId>
            <groupId>com.zty</groupId>
            <!-- 继用父项目的版本 -->
            <version>${zty-framework.version}</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>framework-common</artifactId>
        <groupId>com.zty</groupId>
        <!-- 继用父项目的版本 -->
        <version>${zty-framework.version}</version>
    
        <dependencies>
            ...
        </dependencies>
    </project>
    

    最后,如果你对文章内容存在疑惑,欢迎添加我的个人微信进行交流,如果你觉得文章写得不错,给我点个赞吧 ^_^

    相关文章

      网友评论

        本文标题:一篇就够 | 教你用maven搭建自己的开发框架

        本文链接:https://www.haomeiwen.com/subject/zqndghtx.html