1.为什么分模块开发
(1)随着业务的增加, mapper 或者 service类 越来越多 ,项目越来越庞大,项目有点臃肿 -->拆分多个模块
(2)项目代码越来越多, 构建 或者编译, 变得很慢很慢 -->拆分
(3)有些内容,公共的内容 ,有很多项目都可能使用,有必要-- 抽取到公共maven模块
(4)有些内容, 不想让每个人都可以修改 – 抽取到公共的maven模块 util
(5)随着项目业务需求的怎么 ,pom.xml的内容也会变得很长
一般中大型项目 都在使用分模块开发
2.怎么分模块开发
(1)开闭原则
对扩展开放
对修改关闭 – 公共的不要乱修改
(2)低耦合: 尽量的分层开发 service mapper controller --为了维护
高内聚: 比如一个方法 (方法就应该完成一个方法该干的事情 save )
3.拆分
(1)代码拆分
basic-util 工具类
basic-core 公共内容
crm-common 具体项目公共内容
crm-mapper 项目里面具体mapper
crm-service 项目里面service类
crm-web 项目的controller层
(2)配置文件拆分
web.xml applicationContext-mvc.xml -->crm-web模块
applicationContext.xml–crm-service模块
web.xml applicationContext-mvc.xml -->crm-web模块
applicationContext.xml–crm-service模块
3.项目搭建
crm_parent(普通Maven项目)
basic-util 工具类(普通Maven项目)
basic-core 公共内容(普通Maven项目)
crm-common 具体项目公共内容(普通Maven项目)
crm-mapper 项目里面具体mapper(普通Maven项目)
crm-service 项目里面service类(普通Maven项目)
crm-web 项目的controller层(Maven web项目)
4.项目结构
crm_parent pom.xml
<modules>
<module>basic_core</module>
<module>basic_util</module>
<module>crm_common</module>
<module>crm_mapper</module>
<module>crm_service</module>
<module>crm_web</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- spring版本号 -->
<spring.version>4.1.2.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.1</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.2</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<!-- jackson包版本 -->
<jackson.version>2.5.0</jackson.version>
<!--swagger版本-->
<springfox.version>2.4.0</springfox.version>
</properties>
<dependencies>
<!--Spring核心-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<!--aop依赖包-->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
</dependencies>
basic-core
basic-core pom.xml
<dependencies>
<!--引入basic_util-->
<dependency>
<groupId>cn.itsource</groupId>
<artifactId>basic_util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--目的是可以在base中使用@autowired @Transactional注解-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>