這篇文章先會(huì)討論什么是"框架",然后向你展示一個(gè)基于 maven 特性搭建的自制開發(fā)框架與該框架的使用示例,最后將這個(gè)自制框架的搭建過程整理給你凸舵。這篇文章適用于對maven有足夠了解的讀者失尖,如果你還不認(rèn)識maven,歡迎閱讀我的另一篇文章:
內(nèi)容預(yù)覽:
- 討論什么是“框架”
- 展示一個(gè)簡單的基于 maven 特性搭建的自制框架
- 展示上述自制框架的使用示例
- 自制框架的搭建過程
一菇夸、什么是框架
概念
筆者認(rèn)為仪吧,所謂的框架,是指一套抽象的規(guī)范择诈,符合某一框架的規(guī)范,則可稱為使用了這一框架或者基于這一框架羞芍。
舉個(gè)例子荷科,maven項(xiàng)目要求在根路徑有一個(gè)配置文件 pom.xml,還要求項(xiàng)目源代碼畏浆、項(xiàng)目測試代碼全度、項(xiàng)目靜態(tài)資源必須放置到指定的目錄里;再舉個(gè)例子将鸵,Spring項(xiàng)目需要定義或配置各種bean,注冊到容器里的bean草娜,可以被依賴注入注解來管理使用痒筒,完成IoC;最后再舉個(gè)例子移袍,MybatisORM框架老充,一方面需要通過配置文件指代清楚mapper代碼類所在的位置,一方面要在配置好的靜態(tài)文件目錄觅够。
框架有輕重之分巷嚣,所謂輕量級的框架,是指使用框架與不使用框架的區(qū)別并不明顯窘拯,框架規(guī)范對傳統(tǒng)開發(fā)侵入性低;而重量級的框架則相反直焙,框架規(guī)范對傳統(tǒng)開發(fā)的侵入性高砂轻,使用框架與不使用框架的區(qū)別很明顯。
二厨喂、自制框架 - zty-framework
作用概述
zty-framework 屬于輕量級框架庄呈,完全基于 maven 項(xiàng)目框架的特性對 Spring 框架進(jìn)行封裝,為不同種類的開發(fā)項(xiàng)目提供與項(xiàng)目類型對應(yīng)的整套 Spring 依賴斜纪,并且還定義了一套專有的規(guī)范文兑。主要功能如下:
- 簡化 Spring 項(xiàng)目搭建過程。按功能類型封裝常用功能依賴包因块,統(tǒng)一管理籍铁,對外提供完整的"依賴包套餐"。只需引入 zty-framework 的相應(yīng)模塊吩愧,即可完成對某一功能類型所需的所有依賴包的導(dǎo)入過程增显,既避免了重復(fù)引入依賴的人工操作,也大大減少修改依賴引入所需的工作量。
- 定義規(guī)范腮恩,減少重復(fù)工作秸滴,提升開發(fā)效率,改善開發(fā)質(zhì)量。針對絕大多數(shù)開發(fā)場景届垫,zty-framework 抽象出了一套通用的參數(shù)規(guī)范全释、異常信息規(guī)范和注解規(guī)范。開發(fā)者遵從這些規(guī)范進(jìn)行開發(fā)妄迁,可以很方便地完成統(tǒng)一參數(shù)校驗(yàn)李命、統(tǒng)一異常處理,既減輕了工作量黔州,也改善了開發(fā)質(zhì)量阔籽。
如果將 Spring 框架的各部分內(nèi)容比喻成小積木的話仿耽,那么 zty-framework 的各部分內(nèi)容則可以理解為——由幾個(gè)小積木組建成的模塊。
框架內(nèi)容展示
首先是 zty-framework 的目錄結(jié)構(gòu)圖:
對于負(fù)責(zé)統(tǒng)一實(shí)現(xiàn)并管理實(shí)體類君躺、通用類(公共類)开缎、工具類的模塊,zty-framework 抽象出了 framework-common俺泣,其他項(xiàng)目只需引入 framework-common 依賴完残,即可完成所需依賴包的導(dǎo)入。framework-common 的 maven 依賴圖如下:
zty-framework 的規(guī)范類熟掂,在 framework-common 里面進(jìn)行了實(shí)現(xiàn)扎拣。分別是這四部分:1)框架自定義注解;2)框架規(guī)范參數(shù)類誉券;3)框架異常規(guī)范類;4)框架工具類踩验。如果需修改這些內(nèi)容琴锭,只需在 framework-common 里進(jìn)行修改即可。
對于負(fù)責(zé)實(shí)現(xiàn)與數(shù)據(jù)庫交互厕九、完成業(yè)務(wù)功能的模塊扁远,zty-framework 抽象出了 framework-bo(BO表示Business Object刻像,這里指業(yè)務(wù)對象層),其他項(xiàng)目只需引入 frame-bo 即完成了對所需依賴的導(dǎo)入谷羞。framework-bo 的 maven 依賴圖如下:
對于負(fù)責(zé)對外提供API接口溜徙、接口處理的模塊,zty-framework 抽象出了 framework-web嗓违,其他項(xiàng)目只需引入 frame-web 即完成了對所需依賴的導(dǎo)入图贸。framework-web 的 maven 依賴圖如下:
對于按實(shí)際需要集成各模塊疏日、生成可部署項(xiàng)目的模塊,zty-framework 抽象出了 framework-springboot-app 模塊涕滋,maven 依賴圖如下:
以上只是筆者搭建的示例净神,framework 各模塊的依賴可以按需選擇、調(diào)整爱榕。
使用示例
以實(shí)際項(xiàng)目中“賬號模塊”的實(shí)現(xiàn)作為 zty-framework 的使用示例坡慌,帶你更近一步感受 zty-framework 的便利。
首先是創(chuàng)建負(fù)責(zé)定義公用實(shí)體類的 account-common 模塊跪者,引入 framework-common 依賴:
account-common 的實(shí)體類包括數(shù)據(jù)對象類(DO)和數(shù)據(jù)傳輸對象類(DTO)渣玲,其中DO表示數(shù)據(jù)庫表結(jié)構(gòu)相對應(yīng)的實(shí)體類弟晚,DTO表示用于傳輸?shù)淖侄蚊撁艉蟮念悾琍OJO命名遵從阿里巴巴開發(fā)規(guī)范:
第二步是創(chuàng)建負(fù)責(zé)完成與數(shù)據(jù)庫交互的 account-bo 模塊枚钓,引入 framework-bo 和 account-common 依賴:
account-bo 模塊的內(nèi)容主要包括DAO類和Service類搀捷,如果業(yè)務(wù)涉及到復(fù)雜流程的實(shí)現(xiàn)多望,還可以基于Service類提供的方法,實(shí)現(xiàn)API類:
第三步是創(chuàng)建負(fù)責(zé)提供 http 接口的 account-web 模塊至壤,引入 framework-web 和 account-bo 依賴:
account-web 主要實(shí)現(xiàn) Controller 類像街,完成參數(shù)檢查晋渺,調(diào)用 bo 層的接口方法實(shí)現(xiàn)功能:
最后一步,結(jié)合實(shí)際需求畴栖,對各個(gè)功能模塊進(jìn)行集成八千,搭建一個(gè)可部署的項(xiàng)目燎猛。這里的 service-customer 模塊引入了"賬號管理模塊"照皆、"微信授權(quán)模塊"膜毁、"文件管理模塊"和"緩存管理模塊"的依賴,當(dāng)然還有 framework-springboot-app瘟滨,完整依賴圖如下:
各個(gè)其他模塊的功能杂瘸,皆已在各模塊內(nèi)完成了實(shí)現(xiàn),service-customer 只需基于 Spring AOP 按業(yè)務(wù)需求完成統(tǒng)一參數(shù)處理和統(tǒng)一異常處理即可:
搭建過程
- 創(chuàng)建 maven 空工程昌简,命名為 framework绒怨;
- 將工程 framework 的 pom.xml 的<packaging>改為
pom
; - 在工程 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>
<!-- 父模塊必須設(shè)置為此 -->
<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>
- 分別創(chuàng)建框架子模塊 framework-common疗疟、framework-bo、framework-web 和 framework-springboot-app栓袖,并在<parent>標(biāo)簽里使他們繼承于 framework店诗;
- 在相應(yīng)的模塊里引入依賴;
- 如果需要捧弃,實(shí)現(xiàn)相應(yīng)模塊的代碼類;
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>
<!-- 繼用父項(xiàng)目的版本 -->
<version>${zty-framework.version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>framework-common</artifactId>
<groupId>com.zty</groupId>
<!-- 繼用父項(xiàng)目的版本 -->
<version>${zty-framework.version}</version>
<dependencies>
...
</dependencies>
</project>
最后嘴办,如果你對文章內(nèi)容存在疑惑买鸽,歡迎添加我的個(gè)人微信進(jìn)行交流,如果你覺得文章寫得不錯(cuò),給我點(diǎn)個(gè)贊吧 ^_^