如果想要获取相关的源码,笔记,和相关工具,增加需求,代码重构,关注我并私信!!!
四 系统设计
1 什么是系统概要设计和系统详细设计
包括:
1. 系统概要设计(必须要做):因为这是给客户看的。包括:
设计内容:主要是系统框架,系统内、外部接口.
内部接口:就是本系统平台的各各子系统之间的接口,以及模块之间接口,因为本系统不止采用一个projec
来划分的,看下面。
外部接口:和其它系统的接口(参考上面的描述)。
网络部署:说明该系统的运行网络是在局域网还是互联网环境内。
概要设计的内容参考:“系统概要设计文档”.doc
2. 系统详细设计(不是必须要做):
设计内容包括:类、接口、及方法描述
详细设计的内容参考:“系统详细设计文档”.doc. 程序员参考此文档进行编码。
2 系统模块的划分方法
2.1 以技术架构的纵向拆分方法(了解)
依据javaEE分层进行的模块划分:企业开发中也比较常见。
优点:简单,分层清晰,小项目采用开发效率高,方便程序员开发。
例如:企业中常见将系统功能进行抽取组成一个子系统,比如系统管理功能,将系统管理的功能抽取出来组成一个子系统,让其它系统公用该子系统。
如下图所示:
但是,缺点也是很明显的,如图:
上面的图示中可以看出其缺点:
进行系统抽取时需要从各各层拷贝代码,如果有其它功能依赖该抽取的功能代码,系统会报错.
即:模块重用困难,要想在另外一个系统重用模块必需将每个层的代码拷贝出去,模块之间耦合度高。
解决方法:采用下面的“以业务模块的横向拆分方法”!
2.2 以业务模块的横向拆分方法(了解)
基于业务架构横向拆分,每个业务模块内按技术架构纵向拆分:企业开发中也比较常见。
红色字体就是业务模块的名称,模块是在同一个project中来划分的,如图:
优点:按模块分包更加清晰,方便开发维护,对中大型项目可以采用。
缺点:虽然按模块将包创建,但模块和模块共存与一个工程,每个模块运行都必需将其它模块同时编译、部署,如果抽取出来的话同样会报错,“纵向拆分的方法”中的问题--->模块与模块之间的依赖问题依旧没有解决,开发效率不高。
最大的问题:模块之间的依赖没有一个规范的管理。
2.3 以maven作为架构进行模块划分(掌握)
Maven是一个优秀的项目管理工具,提高项目管理效率。
将每个模块以工程化方式开发,即为每个模块创建为一个maven工程,这也是该系统所采用的模块划分的方法。
如图:
注意:各个maven工程之间的依赖不一定按照上面的方向所指,也可能是杂乱无章的,上图只是一个示例。
根据Maven提依的依赖管理规范---->依赖方和被依赖方通过maven的GAV三坐标配置起来,说白了就是jar包的配置后,就可将被依赖方关联起来。(依赖于某个系统的jar包)
因为:将模块的jar发布到仓库之前 ,maven会自动执行编译、测试 ,通过后将jar发布到仓库,就解决了一些编译阶段的错误。如果将测试做的完善,运行阶段的错误基本也可以避免。
因此,可以很方便的进行模块之间的拆分!!!
总结其优点:每个模块单独创建不同的工程,单个模块运行无需编译其它代码(因为maven自动帮你编译打包发布到仓库了,当然这么做的前提是使用了maven的命令来执行这一系列的步骤),开发效率提高。模块之间采用maven依赖管理,只要配置好模块之间的依赖由maven进行管理。
按照maven规范运行整个系统达到一步构建,方便系统部署、测试、运行。
缺点:需要将模块分开多个子工程。如果需要将某个子工程中的某个层(例如service层)中的代码抽取出来公用的话,由于模块很多,那么总的project工程的数目会很多的。对于小公司由于人力不够,如果采用此模式开发反而会降低开发效率,因为一个人需要同时维护多个工程肯定比维护一个工程耗费经历。所以对于小项目不建议采用此模式开发。
3 本系统的架构(重点)
本系统采用maven进行模块划分。
本系统技术架构:springmvc3.1.4+mybatis3.2.3+oracle,如图:
分为这几大模块,下面分别针对这几大模块进行详细的设计!!!
详细参考“药品集中采购平台系统框架.docx”
3.1 模块1:技术架构模块
包括:springmvc3.1.4+mybatis3.2.3的jar包.
技术架构模块不需要进行编码的开发。因为使用的是maven来管理的,只需要在maven的pom.xml中配置框架的jar包的位置,即GAV三坐标即可。
3.2 模块2:系统主工程project模块
可以看到“系统管理”模块是最容易被抽取出来作为公用的模块。
系统主工程模块project又包括:base系统基础模块和business系统业务模块。(参考下面的“模块之间的依赖关系图”)
3.2.1 Base系统基础模块
包括:系统管理功能,其它业务功能依赖于该base模块.
而base模块又依赖于技术架构模块
3.2.2 business系统业务模块
business业务模块依赖于base模块。
3.3 模块3:常用工具类模块
该工具类模块是每个公司都会用到的模块。将常用的工具类抽取出来组成一个单独的maven工程。
例如:把常用的工具类放置到util包下.
Base模块和business模块都依赖与该工具模块。
4 模块之间依赖关系图
关于开发规范的部分会随之项目的深入而逐步的来介绍规范!!!
为了方便学习,从而减少工程的数量,将base和business合并为一个系统主工程模块project,如图:
5 架构模块总结
最终要构建三个maven工程:
- 系统主工程模块:yycgproject
- 系统工具类模块:yycgutil
- 技术架构模块:spring和mybatis
五 Maven环境配置
Maven的版本:3.2.1
Eclipse版本:kapler
关于maven环境的配置可以参考相关的maven的文档!!!
1 命令行执行maven
Maven在运行时,会先找用户配置setting.xml文件,再找全局配置setting.xml文件。
1)Maven的用户配置:在
根据本机路径查找,如下图所示路径:
有一个setting.xml
2) Maven全局配置:在maven安装目录下的settingg.sml文件,如下:
3) 为了方便操作,建议只使用全局配置!
可以把.m2目录下setting.xml文件删除即可。
这样的话maven在运行时就不会找用户配置了!而是直接运行全局配置!
在全局的setting.xml中配置本地仓库的路径,如下::
注意:在cmd中使用命令行方式来执行maven命令时,只会找全局配置。
2 Eclipse中执行maven
首先需要确保maven插件在eclipse中正确安装了!
因为我们开发用的是eclipse,所以还需要在eclipse开发环境中来配置maven的执行,因此只需要配置maven用户配置:
在本地仓库中创建一个setting.xml,此文件就是eclipse执行maven时所要查找的maven的用户配置文件。
因为在setting.xml文件中配置了存放本地仓库的路径,按照如下图所示配置好后,eclipse在执行maven时会自动查找到
该setting.xml文件,找到了该文件也就找到了本地仓库的路径了!!
3 如何判断maven和eclipse整合成功
说明,eclipse和maven整合完成,可以使用本地仓库中的jar包了。
注意:如果上图中的本地仓库中的路径显示不出来,需要执行“rebuild index”,如下图所示:
六 系统框架搭建
1 使用maven创建技术架构模块springmybatis
该模块不进行具体的开发工作!
1.1 创建流程
创建一个maven工程,该maven工程也是一个Java工程.
因为在此技术架构模块中不需要编写任何的代码,只是在pom.xml中配置springmvc3.1.4和mybatis3.2.3的依赖。也就是说,该模块中只包括依赖所需的框架的jar包,因此该模块是一个Java工程。
1.2 构建pom.xml文件
构建的pom.xml文件中包括了mybatis以及spring两个框架的jar包,其中mybatis框架的版本是mytatis-3.2.3,spring框架的版本是3.1.4.REALES.
在以前的开发中仅仅是把相关的jar包复制到项目中即可,但是如果使用maven来构建的项目的话,除了需要复制相关的jar包到项目中(具体是在本地仓库中),还需要在pom.xml中配置jar包的GAV三坐标来指引maven项目去找jar包。
而之所以设定mybatis框架的版本是mytatis-3.2.3,spring框架的版本是3.1.4.REALES,这两个版本信息不是随随便便就确定
- 这是通过查找mybatis中的pom.xml文件以及整合包中的pom.xml文件,从而知道mybatis及其整合包中所有依赖的jar包,按理说,spring中的所有依赖的Jar包也通过该方式来查找。
但是我们发现,在mybatis的整合spring的jar包中(即mybatis-spring-1.2.2)的pom.xml文件中的所有依赖信息里面都
有所依赖的spring的GAV坐标了,所有就不用再查找spring的依赖包了。
只需要将上边找到的两个pom.xml内容(一个是mybatis的pom.xml,另一个是mybatis整合spring的pom.xml)结合起来放到本技术架构模块的pom.xml文件中即可。
虽然本系统已经帮我们创建好了技术架构模块的pom.xml文件,我们复制过来使用即可。
但是在实际的开发中往往会因为版本之间的冲突以及版本之间的不一致而导致的错误会很多,那么就需要我们进行裁剪工作,把正确的GAV坐标配置在该技术架构模块的
pom.xml中,而这个工作会随之项目的复杂度会越来越需要时间!!!
简单说就是相当于之前的找jar包的过程!!!
下面是创建的pom.xml文件的内容:
<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"> <modelVersion>4.0.0</modelVersion> <groupId>yycg</groupId> <artifactId>springmybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springmybatis</name> <url>http://maven.apache.org</url> <properties> <spring.version>3.1.4.RELEASE</spring.version> <mybatis.version>3.2.3</mybatis.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- springmvc-3.1.4 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- mybatis-3.2.3 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> <!-- <scope>provided</scope> --> </dependency> <dependency> <groupId> org.aspectj</groupId> <artifactId> aspectjweaver</artifactId> <version> 1.6.11</version> </dependency> <!-- |