一 项目介绍
我们要开发一个类似于天猫,京东一样的B2C电商平台,系统架构如下图所示:
1.1 营销模式介绍
O2O:线下产品与互联网结合,通过互联网购买线下产品,比如:外卖
O2C:私人订制,用户将需求给商家说,根据需求定制产品。比如:定制家具
B2B:企业之间的交易,直接到企业中买产品。
B2C:商家和个人的直接交易
C2C:个人和个人之间的直接交易
1.2 功能介绍
后台管理系统:管理商品、订单、类目、商品规格属性、用户管理以及内容发布等功能。
前台系统:用户可以在前台系统中进行注册、登录、浏览商品、首页、下单等操作。
会员系统:用户可以在该系统中查询已下的订单、收藏的商品、我的优惠券、团购等信息。
订单系统:提供下单、查询订单、修改订单状态、定时处理订单。
搜索系统:提供商品的搜索功能。
单点登录系统:为多个系统之间提供用户登录凭证以及查询登录用户的信息。
1.3 系统架构
1.3.3、传统架构
思考:这种架构有什么问题?
1、模块之间耦合度太高,其中一个升级其他都得升级
2、开发困难,各个团队开发最后都要整合一起
3、系统的扩展性差
4、不能灵活的进行分布式部署。
1.3.4、分布式架构
分布式架构:
把系统按照模块拆分成多个子系统。
优点:
- 把模块拆分,使用接口通信,降低模块之间的耦合度。
- 把项目拆分成若干个子项目,不同的团队负责不同的子项目。
- 增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。
- 可以灵活的进行分布式部署。
缺点:
- 开发难度高,学习成本高
- 子系统之间要实现通信,对网络要求很高
1.4、技术选型(主要技术)
Spring、SpringMVC、Mybatis(或者使用SpringBoot)
JSP、JSTL、jQuery、jQuery plugin、EasyUI、KindEditor(富文本编辑器)、CSS+DIV
Redis(缓存服务器)
Solr(搜索):做搜索的
httpclient(调用系统服务):系统之间进行交互的
Mysql
Nginx(web服务器)
1.5、开发工具和环境
Eclipse 4.5.0(Mars),自带maven插件,需要手工安装svn插件。
Maven 3.3.3(开发工具自带)
Tomcat 7.0.53(Maven Tomcat Plugin)
JDK 1.7
Mysql 5.6
Nginx 1.8.0
Redis 3.0.0
Win7 操作系统
SVN(版本管理)/GIT
1.6、人员配置
产品经理:3人,确定需求以及给出产品原型图。
项目经理:1人,项目管理。
前端团队:5人,根据产品经理给出的原型制作静态页面。
后端团队:20人,实现产品功能。
测试团队:5人,测试所有的功能。
运维团队:3人,项目的发布以及维护。
二 分析
2.1、技术分析
我们使用maven进行项目构建,因为maven可以直接部署项目和运行项目,而且使用maven可以搭建聚合项目等,而且会自动管理jar包。
我们的x
2.2、maven项目分类
pom:这个项目我们不写代码,只定义版本,其他的项目继承该项目统一jar包版本(不用运行项目,自定义模板)
Jar:写一些功能,提供出去给其他系统使用。(比如:工具类:处理字符串、时间等)
war:web工程,可以放到web容器中运行,一个web项目最少要有一个war工程
2.3、maven项目之间的关系
1)继承:maven项目之间可以继承,继承之后,子项目可以使用父项目中的依赖,不用写version。
2)聚合:每个系统可以揉到一起组成一个大的项目。
3)依赖:系统使用其他的jar包,其实jar包就是一个项目打成的包
2.4、创建项目分析(分模块开发)
三 后台系统搭建
3.1、设置eclipse
1)配置maven
2)切换视图:package explorer
配置maven
切换视图
3.2、创建父工程
3.2.1、创建工程
功能:定义jar包版本(不用运行,只是为了定义jar包的版本)
类型:pom
3.2.2、配置pom文件
<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>com.taotao</groupId>
<artifactId>taotao-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 集中定义依赖版本号 -->
<properties>
<junit.version>4.12</junit.version>
<spring.version>4.1.3.RELEASE</spring.version>
<mybatis.version>3.2.8</mybatis.version>
<mybatis.spring.version>1.2.2</mybatis.spring.version>
<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
<mysql.version>5.1.32</mysql.version>
<slf4j.version>1.6.4</slf4j.version>
<jackson.version>2.4.2</jackson.version>
<druid.version>1.0.9</druid.version>
<httpclient.version>4.3.5</httpclient.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
<joda-time.version>2.5</joda-time.version>
<commons-lang3.version>3.3.2</commons-lang3.version>
<commons-io.version>1.3.2</commons-io.version>
<commons-net.version>3.3</commons-net.version>
<pagehelper.version>3.4.2-fix</pagehelper.version>
<jsqlparser.version>0.9.1</jsqlparser.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<jedis.version>2.7.2</jedis.version>
<solrj.version>4.10.3</solrj.version>
</properties>
<!-- 只定义依赖的版本,并不实际依赖 -->
<dependencyManagement>
<dependencies>
<!-- 时间操作组件 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
<!-- Apache工具组件 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<!-- 文件上传组件 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.ve