1电商核心业务主线

2电商介绍

2.1电商理解

电商,全名叫电子商务,英文名称Electronic Commerce,简称EC。

“21世纪要么‘电子商务’,要么‘无商可务’”——比尔盖茨对电子商务的高度评价。

电子商务通常是指在全球各地广泛的商业贸易活动中,在因特网开放的网络环境下,基于浏览器/服务器应用方式,买卖双方不谋面地进行各种商贸活动,实现消费者的网上购物、商户之间的网上交易和在线电子支付以及各种商务活动、交易活动、金融活动和相关的综合服务活动的一种新型的商业运营模式。

2.2电商运营模式(掌握)

按照电商行业的运营模型,一般分为以下几种模式:

B2B:商家到商家。例如:阿里巴巴(www.1688.com)、慧聪网。

B2C:商家到用户。例如京东商城、国美网上商城。

B2B2C:商家到商家到用户,比如京东、天猫都有第三方商户。

C2C:用户到用户。比如淘宝。

O2O:线上到线下,比如百度外卖、美团等。

2.3 11.11

2.4电商行业技术特点

分布式

高并发

高可用

集群

负载均衡

海量数据

系统安全

3天上人间商城介绍

3.1商城概述

天上人间(名字随便哈…)商城是一个综合性的B2C商城,运营模式类似京东商城。对于B2C模式的商城来说,它的系统主要包括『前台商城系统』、『后台管理系统』,及一些『周边系统』。

[商城会员]可以在『前台商城系统』搜索商品、用户登录、添加购物车、提交订单等操作。

[商城运营人员]可以在『后台管理系统』中管理商品、订单、会员等信息。

[商城客服人员]可以在『后台管理系统』中处理用户的询问以及投诉等操作。

3.2功能架构

3.3系统架构(重点)

项目类型:传统项目、互联网项目。

传统项目:使用人群是公司内部员工。没有高并发、集群、分布式等部署问题。

互联网项目:使用人群是互联网用户。有高并发、集群、分布式等部署问题。

传统项目只需要传统架构即可。

互联网项目需要集群分布式等架构思维。

3.3.1传统架构

依照传统架构实现的话,只需要创建一个应用(最终打成一个war包的工程)即可。

思考:传统架构在互联网应用中存在什么问题?

1、系统耦合性高,一个模块出现问题,其他模块都无法正常使用。

2、系统扩展性差,添加新功能时,会对现有系统产生破坏。

3.3.2分布式系统架构

依据分布式系统架构实现的话,需要创建多个工程,不同的工程完成不同的功能。

分布式架构:把系统按照系统模块拆分成多个独立的子系统。

优点:

1、系统之间弱耦合,把模块拆分,使用接口通信,降低模块之间的耦合度。

2、系统之间扩展性好,有新功能时,添加子模块即可,不会对原有系统产生破坏,大大增强系统可扩展性。

3、部署灵活方便,互联网应用需要进行分布式部署,使用这种架构,可以灵活的进行分布式部署。

缺点:

系统之间交互需要使用远程通信,接口开发增加工作量。

3.3.3天上人间商城系统架构(SOA)

天上人间商城的架构就是采用的分布式架构,只不过在此架构基础之上,我们又实现了面向服务的思想,所以天上人间商城的架构就是分布式服务架构。

天上人间商城架构体系两部分信息:

1、分布式(表现层分布式、服务层分布式)

2、面向服务(表现层和服务层拆分)

a)需要使用RPC框架(webservice,soap协议很大)

b)使用restful请求(比如移动端app调用后台服务,调用http请求)

c)Dubbo(阿里出品,只能在公司内部使用)

具体架构如下:

天上人间商城的架构:

1、先是按照工程的三层结构进行拆分。

2、其次再根据功能模块进行拆分。

3.4技术选项

Maven(管理依赖及工程构建)

SVN(版本控制工具)

SSM框架(spring+springmvc+mybatis)

Mysql(数据库)

JSP、jQuery、jQuery EasyUI、KindEditor(富文本编辑器)

Redis(缓存服务器)

Solr(搜索服务器)

Dubbo+zookeeper(调用&发布服务)

Nginx(http&反向代理服务器)

FastDFS(图片服务器)

Freemarker(页面静态化)

Activemq消息中间件

4搭建后台管理系统

整个电商系统中的工程都是由maven来创建。

Maven的核心功能:依赖管理、项目构建

Maven的核心概念:坐标(GAV)、依赖传递、继承、聚合

继承和聚合都是POM工程。

项目一创建的父工程,即体现继承也体现聚合。

在继承的父工程中,项目管理依赖版本。

在聚合工程中,实际上就是将聚合工程的子模块,最终合成一个war包。

使用maven很重要的认识就是需要知道本地仓库?建议一个项目单独指定本地仓库地址。

我们为什么使用maven来创建工程呢?

首先,maven是一个优秀的项目构建工具。使用maven,可以很方便的对项目进行分模块构建,这样在开发和测试打包部署时,效率会提高很多。

其次,maven可以进行依赖的管理。使用maven,可以将不同系统的依赖进行统一管理,并且可以进行依赖之间的传递和继承。

4.1设置天上人间商城Maven本地仓库

使用eclipse mars2自带的maven插件,但是maven版本是3.3.9,指定天上人间商城专用本地仓库地址。

如果不能联网,可以将以下仓库压缩包解压,然后拷贝repository目录中的内容到自己的本地仓库位置,比如我的本地仓库:E:\08-repo\02-tsrj\repository

4.2Maven工程结构

|--tsrj-parent(父工程,主要管理依赖版本,不真实添加依赖,打包类型POM)

|--tsrj-common(通用工具类工程,jar)

|--tsrj-manager(后台管理系统,聚合工程POM)

|--tsrj-manager-pojo(实体类工程,jar)

|--tsrj-manager-dao(持久层工程,jar)

|--tsrj-manager-interface(服务层工程,jar)

|--tsrj-manager-service(服务实现类工程,jar)

|--tsrj-manager-web(表现层工程,war)

为什么需要tsrj-parent工程?

为什么需要对tsrj-manager工程创建聚合工程,聚合工程的作用是什么?

可以提高子模块的可重用性。

4.3搭建tsrj-parent

作用:使用dependencyManagement标签统一管理依赖版本号。

4.3.1POM文件

<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>cn.tsrjmall</groupId>

<artifactId>tsrj-parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>pom</packaging>

<!-- 集中管理版本号 -->

<properties>

<!-- 数据库相关 -->

<mysql.version>5.1.32</mysql.version>

<druid.version>1.0.9</druid.version>

<mybatis.version>3.2.8</mybatis.version>

<pagehelper.version>3.4.2-fix</pagehelper.version>

<!-- mybatis与spring整合包 -->

<mybatis.spring.version>1.2.2</mybatis.spring.version>

<!-- spring相关 -->

<spring.version>4.1.3.RELEASE</spring.version>

<!-- 页面相关 -->

<jstl.version>1.2</jstl.version>

<freemarker.version>2.3.23</freemarker.version>

<jackson.version>2.4.2</jackson.version>

<!-- 日志相关 -->

<slf4j.version>1.6.4</slf4j.version>

<!-- 日期库 -->

<joda-time.version>2.5</joda-time.version>

<!-- commons工具包 -->

<commons-lang3.version>3.3.2</commons-lang3.version>

<commons-io.version>1.3.2</commons-io.version>

<commons-fileupload.version>1.3.1</commons-fileupload.version>

<commons-net.version>3.3</commons-net.version>

<!-- redis客户端 -->

<jedis.version>2.7.2</jedis.version>

<!-- solr客户端 -->

<solrj.version>4.10.3</solrj.version>

<!-- quartz时间任务 -->

<quartz.version>2.2.2</quartz.version>

<!-- servlet相关 -->

<servlet-api.version>2.5</servlet-api.version>

<jsp-api.version>2.0</jsp-api.version>

<!-- 单元测试 -->

<junit.version>4.12</junit.version>

<!-- dubbo -->

<dubbo.version>2.5.3</dubbo.version>

<zookeeper.version>3.4.7</zookeeper.version>

<zkclient.version>0.1</zkclient.version>

<!-- fastdfs依赖 -->

<fastdfs_client.version>1.25</fastdfs_client.version>

<!-- activemq依赖 -->

<activemq.verion>5.11.2</activemq.verion>

</properties>

<!-- 统一管理依赖版本号 -->

<dependencyManagement>

<dependencies>

<!-- 时间操作组件 -->

<dependency>

<groupId>joda-time</groupId>

<artifactId>joda-time</artifactId>

<version>${joda-time.version}</version>

</dependency>

<!-- Apache工具组件 -->

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>${commons-lang3.version}</version>

<artifactId>commons-io</artifactId>

<version>${commons-io.version}</version>

<!-- 文件上传组件 -->

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>${commons-fileupload.version}</version>

<groupId>commons-net</groupId>

<artifactId>commons-net</artifactId>

<version>${commons-net.version}</version>

<!-- Jackson Json处理工具包 -->

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>${jackson.version}</version>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>${junit.version}</version>

<!-- 日志处理 -->

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>${slf4j.version}</version>

<!-- mysql驱动 -->

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>${mysql.version}</version>

<!-- 数据库连接池包 德鲁伊(druid) -->

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>${druid.version}</version>

<!-- mybatis -->

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>${mybatis.version}</version>

<!-- mybatis的分页插件 -->

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper</artifactId>

<version>${pagehelper.version}</version>

<!-- mybatis与spring的整合包 -->

<artifactId>mybatis-spring</artifactId>

<version>${mybatis.spring.version}</version>

<!-- spring的包 -->

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${spring.version}</version>

<artifactId>spring-beans</artifactId>

<artifactId>spring-jdbc</artifactId>

<artifactId>spring-webmvc</artifactId>

<artifactId>spring-aspects</artifactId>

<artifactId>spring-context-support</artifactId>

<artifactId>spring-jms</artifactId>

<!-- jsp相关 -->

<groupId>jstl</groupId>

<artifactId>jstl</artifactId>

<version>${jstl.version}</version>

<!-- freemarker相关 -->

<groupId>org.freemarker</groupId>

<artifactId>freemarker</artifactId>

<version>${freemarker.version}</version>

<!-- servlet-api和jsp-api -->

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>${servlet-api.version}</version>

<scope>provided</scope>

<artifactId>jsp-api</artifactId>

<version>${jsp-api.version}</version>

<!-- Redis客户端 -->

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>${jedis.version}</version>

<groupId>org.apache.solr</groupId>

<artifactId>solr-solrj</artifactId>

<version>${solrj.version}</version>

<!-- 定时任务 -->

<groupId>org.quartz-scheduler</groupId>

<artifactId>quartz</artifactId>

<version>${quartz.version}</version>

<!-- dubbo相关 -->

<artifactId>dubbo</artifactId>

<version>${dubbo.version}</version>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

<version>${zookeeper.version}</version>

<groupId>com.github.sgroschupf</groupId>

<artifactId>zkclient</artifactId>

<version>${zkclient.version}</version>

<groupId>fastdfs_client</groupId>

<artifactId>fastdfs_client</artifactId>

<version>${fastdfs_client.version}</version>

<groupId>org.apache.activemq</groupId>

<artifactId>activemq-all</artifactId>

<version>${activemq.verion}</version>

</dependencies>

</dependencyManagement>

<build>

<!-- 定制打包的包名 -->

<finalName>${project.artifactId}</finalName>

<plugins>

<!-- 资源文件拷贝插件 -->

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-resources-plugin</artifactId>

<version>2.7</version>

<configuration>

<encoding>UTF-8</encoding>

</configuration>

</plugin>

<!-- java编译插件 -->

<artifactId>maven-compiler-plugin</artifactId>

<version>3.2</version>

<source>1.7</source>

<target>1.7</target>

</plugins>

<pluginManagement>

<!-- 配置Tomcat插件,只管理,不真实添加tomcat插件 -->

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

</pluginManagement>

</build>

</project>

4.4搭建tsrj-common

4.4.1POM文件

<parent>

</parent>

<artifactId>tsrj-common</artifactId>

<!-- 添加依赖 -->

4.5搭建tsrj-manager

tsrj-manager工程是一个聚合工程,也就是POM工程。

4.5.1创建聚合工程

4.5.2修改POM文件

要运行聚合工程,需要配置tomcat7的插件。

<artifactId>tsrj-manager</artifactId>

<!-- 添加tomcat插件,此处不用写版本号 -->

<!--不配置Tomcat7插件,也能运行。不过默认的端口是8080,path就是工程的名称 -->

<port>8080</port>

<path>/</path>

4.5.3创建tsrj-manager-pojo

创建聚合工程的子模块tsrj-manager-pojo工程。

第一步:右键点击tsrj-manager工程,new—>project

第二步:next

第三步:点击Finish,创建工程。

4.5.4创建tsrj-manager-dao

同tsrj-manager-pojo的创建

4.5.4.1POM文件

<artifactId>tsrj-manager-dao</artifactId>

<groupId>${project.groupId}</groupId>

<artifactId>tsrj-manager-pojo</artifactId>

<!-- Mybatis -->

<!-- MySql -->

<!-- 连接池 -->

<!-- spring -->

4.5.5创建tsrj-manager-interface

4.5.5.1POM文件

<artifactId>tsrj-manager-interface</artifactId>

4.5.6创建tsrj-manager-service

4.5.6.1POM文件

<artifactId>tsrj-manager-service</artifactId>

<version>${project.version}</version>

<!-- 服务接口依赖 -->

4.5.7搭建tsrj-manager-web

4.5.7.1POM文件

<artifactId>tsrj-manager-web</artifactId>

<packaging>war</packaging>

<!-- JSP相关 -->

4.5.7.2Web.xml

注意:使用maven创建的web工程,需要手动创建WEB-INF目录和web.xml文件(或使用eclipse自带工具生成)。

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

id="tsrj" version="2.5">

</web-app>

如果有的小伙伴是用的idea,下面的截图是在idea中的结构

最近想了下,打算写个电商(京东)的案例,从这篇开始,大概持续一个月左右,每天都会更新一部分,对于想做电商的同学肯定会有帮助,至于页面资料和源码,需要的同学可以私信我,之后我也会放在GitHub上,感谢大家的支持。

java进阶之电商架构简介相关推荐

  1. Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载)

    Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载) 说明:主要是针对一些中大型的项目需要进行分布式以及负载均衡的架构提一些思路与建议. 面对大量用户访问.高并发请求,海量 ...

  2. Java开源生鲜电商平台-深刻理解电商的库存架构与解决方案(源码可下载)

    https://www.cnblogs.com/jurendage/p/9227283.html 说明:一般电商的库存都是跟SKU相关联的,那么怎么样才能进行SKU的库存管理呢?有以下几种方式与方法: ...

  3. Java开源生鲜电商平台-支付模块的设计与架构(源码可下载

    Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) 开源生鲜电商平台支付目前支持支付宝与微信.针对的是APP端(android ...

  4. 大数据 互联网架构阶段 电商项目简介

    电商项目简介 零.目录 电商项目特点 电商项目技术难点 电商项目简介 开发工具 电商项目架构 开发环境 一.电商项目特点 分布式 数十台服务器,甚至百台.千台.万台,包括:Nigix负载均衡集群.To ...

  5. Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载) 说明:订单抽成指的是向卖家收取相应的信息服务费.(目前市场上有两种抽成方式,一种是按照总额的抽成比率,另外一种是按照订单明细的抽成比率 ...

  6. 【SDCC 2016】电商架构专题干货七连发:探秘知名电商架构最佳技术实践

    [CSDN现场报道]2016年11月18日-20日,由CSDN重磅打造的年终技术盛会 -- "2016中国软件开发者大会"(Software Developer Conferenc ...

  7. 基于JAVA跨境电商网站计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA跨境电商网站计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA跨境电商网站计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  8. 双11之后,国际、大型、创业、传统、搜索等电商架构首次深度较量

    双11异常火爆,不管是销售数字,还是用户体验,这次全民购物狂潮再次刷新了过去的所有记录.而在这一切背后,需要稳定高效的系统架构设计来提供有力支持.为此,我们在11月18日-20日,中国软件开发者大会上 ...

  9. 双11之后,七大电商架构主题的首次深度较量

    双11异常火爆,不管是销售数字,还是用户体验,这次全民购物狂潮再次刷新了过去的所有记录.而在这一切背后,需要稳定高效的系统架构设计来提供有力支持.为此,我们在11月18日-20日,中国软件开发者大会上 ...

最新文章

  1. yii2.0 下拉菜单
  2. javascript实现yield
  3. [转]Eclipse下的JavaScript编辑器中文无法保存问题解决
  4. mybatis学习(18):列名与属性名不一致的情况(使用ResultMap)
  5. localStorage 真正的本地缓存
  6. 2015-04-11一些知识点
  7. AD学习笔记2021-5-29
  8. 图书管理系统活动,时序图
  9. mysql join 去重_对mysql left join 出现的重复结果去重
  10. bgp状态idle什么原因_27-高级路由:BGP状态
  11. 数字图像处理-图像复原
  12. 你弄懂了Spark的Shuffle实现方式吗?手把手带你解析Spark的Sort Shuffle和Tungsten-Sort Shuffle
  13. stata陈强:第四章 stata操作基础
  14. 找回win10自带的windows照片查看器
  15. 论文笔记 Multiple Instance Detection Network with Online Instance Classifier Refinement - CVPR 2017
  16. MATLAB根据经纬度格网数据画地图
  17. 使用opengl实现爆炸特效
  18. vue+echarts封装日历图
  19. 【习题详解】动态规划DP:硬币游戏 蛋糕 游荡的奶牛 决斗
  20. ClickHouse 合并树表引擎 MergeTree 原理分析

热门文章

  1. 云栖大会上发布了哪些移动研发新利器?
  2. LoadRunner之Analysis主要图表分析说明
  3. 三种睡后收入,你也完全可以拥有
  4. 书单推荐 | 数据挖掘和统计科学自学十大必备读物
  5. 蓝光三维扫描仪用于钢板焊接变形公差分析
  6. 美国和德国的原子弹研究之旅----不带来受益的项目一定不可取吗?
  7. python学习---day7
  8. leetcode50+Pow(x, n)
  9. 内部招聘和外部招聘的优劣势分析
  10. python爬虫网络安全的_基于Python网络爬虫实战 - 安全牛课堂 - 领先的信息安全在线教育平台...