商城系统开发文档.docx
《商城系统开发文档.docx》由会员分享,可在线阅读,更多相关《商城系统开发文档.docx(33页珍藏版)》请在冰豆网上搜索。
商城系统开发文档
商城系统开发文档
第一章
系统简介
1.1背景
电子商务就是指以电子方式在网上完成产品或服务的一种销售,或购买和电子支付等业务交易的过程叫电子商务。
电子商务的通常缩写为EC(ElectronicCommerce),是一种全新的商务活动模式,它充分利用互联网的易用性、广域性和互通性,实现了快速可靠的网络化商务信息交流和业务交易。
电子商务根据各种参与交易的方式不同可以分为企业对企业和企业对公司,而电子商务网站可以根据功能设置的不同可以分为电子市场(E-marketplace)网站、电子销售(E-distributor)网站、电子购买(E-procurement)网站。
其中,电子商务网站的设计就是在中立的立场上的,不但要考虑到购买方的不同和需求,也要考虑到销售方的利益。
电子商务网站的主要服务对象是销售商,而电子购买网站的主要服务对象是买主,其目的说白了就是通过在网站上聚集大量的买主,在通过大宗的购买降低价格。
有利于加速企业信息流通,为保证企业稳定发展奠定基础。
1.2建设目标
构建传统电子商务的基础上实现多用户电子商务平台,从管理到店铺,从店铺到产品的多维度管理模式,提炼出更可靠的盈利模式,主要为了满足顾客的需求,为企业(公司)赢得利润;与其他组织形成电子伙伴关系,向顾客提供更好的服务是一个商务网站的目标;在系统中能够使企业实现全国化与全球化经营战略;通过网络建立战略性的资源外包联盟,原来复杂的工作现在只需按几下鼠标就能在国际互联网上逐一地拓展出几百万个潜在的客户。
因此,系统是实现改善经营管理、开拓市场、提高企业竞争力等。
第二章技术分析
2.1系统分析
2.1.1系统结构
2.1.1组件
我们的系统目前主要分为多组件,其中组件主要有:
组件名称
描述
是否可用(●可用、○不可用)
Base
提供系统最基本能力支持,数据库表的持久化对象,各个表基本操作的接口以及文件上传功能。
●
Core
整个系统的核心组件,在此组件当中包含了缓存、安全、使用Spring通过orm组件来代理hibernate做数据库操作、构造统一的DAO、QueryService等等。
●
Buyer
针对买家管理实现用户中心、消息、收藏夹、购买订单等业务。
●
Admin
基于管理员的能力对系统进行管理,此组件主要包含管理员所能操作的业务。
●
Login-plug
系统中可使用其他登录方式,如QQ、新浪微博等,都在此组件进行接入。
●
Lucene
提供快速对系统、店铺、产品进行全文索引功能。
●
Pay
系统提供多种订单支持方式,其中有支付宝、网银在线、Paypal、财付通。
●
Seller
卖家业务管理统一在这组件内实现,主要有:
宝贝管理、订单管理。
●
Timer
实现系统中的一些定时任务,统计任务等后台运行机制。
●
Uc
支持ucenter整合,实现用户的一站式注册、登录、退出以及社区其他数据的交互。
●
View
实现浏览查看功能,主要针对查询业务独立封装出来组件便于以后优化
●
2.1.2用户角色
目前在整个系统中用户大体分为四种角色:
管理员、买家、卖家、匿名用户。
2.2关键技术
2.2.1编写规范
命名规则
1)包:
命名应该都是名词或名词性词组,全部小写,单词之间用"."分开;一般使用本公司/组织网站域名的逆序后跟具体的软件内部模块名
包命名举例:
packagecom.sun.java;packagecom.mycompany.db;
2)类:
名词或名词性词组,每个单词首字母大写;一般不使用缩写,除非其缩写更通用和便于理解,如HTML;当要区别接口和实现类的时候,可以在类的后面加上"Impl",例如:
interfaceContainer与classContainerImpl;Exception类用"Exception"做为类命名的结尾,例如:
DataNotFoundException;抽象类用"Abstract"做为类命名的开头,例如:
AbstractBeanDefinition,AbstractBeanFactory;Test类最好能用"Test"做为类命名的结尾。
例如:
ContainerTest
类命名举例:
classPerson;classSpringRain
3)接口:
同"类"的命名规则
接口命名举例:
interfaceRunner;
4)方法:
动词或动词性词组,首字母小写,第二个及以后的单词首字母大写;
方法命名举例:
run();displayInformation();
5)变量:
名词或名词性词组,首字母小写,第二个及以后的单词首字母大写;
不提倡使用下画线"_"和美元符"$"作为变量开头;单词间可以使用下画线分隔;变量名不宜过长但也应有意义,除非是临时使用(例如只涉及几行代码)后即丢弃的情况,不建议使用单个字母做变量名,常用的临时使用的变量名包括表示整数的i,j,k,m,n和表示字母的c以及表示异常对象的e等。
变量命名举例:
intage;intstudent_age;StringstudentName;Exceptione;
6)常量:
每一个单词都要大写,单词之间用"_"分开。
常量命名举例:
finalstaticintMIN_WIDTH=4
7)文件的命名:
java源程序文件以.java结尾,编译后的文件以.class结尾。
例如:
Container.java,Container.class。
文件组织
1.一个文件由被空行分割而成的段落以及标识每个段落的可选注释共同组成。
超过2000行的程序难以阅读,所以一个java程序文件中的代码行数不能超过2000行,除非有特殊原因。
每个Java源文件都包含一个单一的公共类或接口。
若私有类和接口与一个公共类相关联,可以将它们和公共类放入同一个源文件。
公共类必须是这个文件中的第一个类或接口。
Java源文件还遵循以下规则,这个规则规定了java程序段落的顺序:
-开头注释
-包和引入语句
-类和接口声明
2.在一个Java类中,各部分顺序:
1)属性声明
2)构造方法声明
3)static语句
4)普通方法声明
5)main方法声明
6)内部类的声明
总结:
一般一个完整的java文件内容如下:
1)包的定义
2)impot类(输入包的顺序、避免使用*)输入包应该按照java.*.*,javax.*.*,org.*.*,com.*.*的顺序import;在import的时候不应该使用*(例如:
java.util.*)
3)类或接口的定义
4)静态变量定义,按public,protected,private顺序
5)实例变量定义,按public,protected,private顺序
6)构造方法
7)方法定义顺序按照public方法(类自己的方法),实现接口的方法,重载的public方法,受保护方法,包作用域方法和私有方法。
注意:
一般类中每个方法的代码行数不要超过100行。
分隔和缩进
1.使用空行
在下述情况下使用单行的空白行来分隔:
1)在方法之间
2)在方法内部代码的逻辑段落小节之间
3)在方法中声明局部变量之后,具体的Java语句之前
4)在注释行之前
5)在同一个源文件中定义的多个类/接口之间使用双行的空白行来分隔
2.使用空格符
除正常的成分之间以空格符分隔名(如数据类型和变量名之间),在下述情况下也应使用一个空格符来分隔:
1)运算符和运算符之间,如:
c=a+b;
2)在参数列表中的逗号后面,如:
voidm1(intyear,intmonth){}
3)在if,for,while待语句之后 如:
if(a>b){}
3.使用换行符
不建议在一行中写多条语句,一条语句的长度一般超过了80个字符时,应该换行;
当一行表达式不能在一行内显示,请按下列顺序要求拆行:
1)在"("或"="符号后拆行
2)在","拆行
3)在一个操作符后拆行
4)把并发的拆行放到同一级别上的缩进
5)如果在拆行中再次拆分的时候遇到"(",应该新拆出来的行放在更远的一个缩进级别上
4.使用小括号
可以使用小括号来强行规定运算顺序
5.使用花括号
开始位置可以位于当前内容的尾部,也可以另起一行
6.使用缩进
在下述情况下应用缩进
1)类中的成分
2)方法体或语句块中的成分
3)换行时的非起始行
缩减量一般为在上一级成分的基础上再缩进四个空格,而Eclipse默认格式化是采用1个制表符的,可以采用下面的方式更改一下:
Window——>Preferences……——>Java——>CodeStyle——>Formatter点右边的"Edit……"按钮,切换到第一个选项卡"Indentation",在Generalsettings组将Tabpolicy由Tableonly改为Spaceonly,同时把Indentationsize和Tabsize改为4,最后把最上面的Profilename取一个名字,名字任意,再点OK按钮就可以了。
以后按Tab键或者Ctrl+Shift+F会自动采用4个空格作为一个层次的缩进。
在eclipse开发工具中,把代码写好之后,可以用快捷键:
CTRL+SHIFT+F来自动格式化代码。
声明语句
1.变量声明:
每行声明一个变量,并加注释。
例如:
intcount;//numberofcontainers
intcount,size;//AVOIDTHIS!
数组声明应该采用前缀方式。
例如:
int[]table;
String[]args;
2.类或接口声明
1)"{"和声明语句在同一行。
2)如果不能在同一行显示,就将"extends"或"implements"进行拆行,并放在两个缩进级别后。
3)"}"符号应该独自占一行。
例如:
publicclassChiefExecutiveOfficer
extendsManager
implementsPerson{
...
}
3.方法声明
"{"和声明语句在同一行。
"}"符号应该独自占一行。
总结:
每行声明一个变量,并尽量在声明变量的同时对其进行初始化,除非其初值尚不确定。
局部变量应在其所在的方法或语句块的开头集中声明,而不应随用随声明。
注释
Java有两种注释方法。
"/*Thisisacomment*/"或"//Thisisacomment"
第一种应该被用到写JavaDoc上,并且都用"/**"开头。
第二种适合于在做部分代码的注释,但只适合做非常短内容的注释。
另外,对于HTML、XML、CSS、JavaScript我要遵守的编码规范如下:
1)HTML、XML由于层次缩进比较多,建议采用两个空格作为一层缩进;
2)CSS和JavaScript为了与HTML配合,也采用两个空格作为一层缩进;
3)HTML、XML的标签名、属性称全部使用小写字母,HTML尽量能符合XHTML的规范,避免使用XHTML不推荐使用的标签,比如:
font、applet等等;
4)HTML的属性值采用双引号界定;
5)JavaScript在尽量使用标准的语法、对象等,变量声明能加上var.字符串常量统一采用单引号界定
2.2.2URL重写
简介
UrlRewriteFilter是一个用于改写URL的Web过滤器,类似于Apache的mod_rewrite。
适用于任何Web应用服务器(如Resin,Orion,Tomcat等)。
其典型应用就把动态URL静态化,便于搜索引擎爬虫抓取你的动态网页。
基本原理
JSP页面地址-->服务器Filter过滤-->调用urlrewrite.xml映射规则-->服务器响应-->转换成伪地址
安装
在其主页下载该包文件,把其jar包放在lib目录下,在web.xml中添加下面内容
Xml代码:
UrlRewriteFilter
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
UrlRewriteFilter
*.htm
参数介绍
web.xml下的filter参数设置介绍
Xml代码:
UrlRewriteFilter
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
--设置定时检查配置文件的时间以供重新加载的时间,该参数值为整型,0为每次都检查,-1为从不检查,默认为-1-->
confReloadCheckInterval
60
--设置配置文件的路径-->
confPath
/WEB-INF/urlrewrite.xml
--设置日志的等级-->
logLevel
DEBUG
--设置状态目录,必须以/开始,默认为/rewrite-status-->
statusPath
/status
--是否允许状态页面,默认为true-->
statusEnabled
true
--设置host的列表,可以使用通配符,多个host用逗号隔开-->
statusEnabledOnHosts
localhost,dev.*,*
--重写规则-->
modRewriteConfText
RewriteRule^/~([^/]+)/?
(.*)/u/$1/$2[R]
RewriteRule^/([uge])/([^/]+)$/$1/$2/[R]
UrlRewriteFilter
*.htm
urlrewrite.xml配置文件参数
Xml代码:
xmlversion="1.0"encoding="utf-8"?
>
DOCTYPEurlrewritePUBLIC"-//tuckey.org//DTDUrlRewrite2.6//EN"
"http:
//tuckey.org/res/dtds/urlrewrite2.6.dtd">
id参数文章管理
^/article_([0-9]+).htm$
/article.htm?
param=$1
mark参数文章管理
^/article_([A-Za-z]+).htm$
/article.htm?
param=$1
2.2.3Velocity模板引擎
简介
Velocity是一个基于java的模板引擎(templateengine),它允许任何人仅仅简单的使用模板语言(templatelanguage)来引用由java代码定义的对象。
作为一个比较完善的模板引擎,Velocity的功能是比较强大的,但强大的同时也增加了应用复杂性。
基本语法
1、"#"用来标识Velocity的脚本语句,包括#set、#if、#else、#end、#foreach、#end、#iinclude、#parse、#macro等;
如:
#if($info.imgs)
#else
#end
2、"$"用来标识一个对象(或理解为变量);如:
$i、$msg、$TagUtil.options(...)等。
3、"{}"用来明确标识Velocity变量;
比如在页面中,页面中有一个$someonename,此时,Velocity将把someonename作为变量名,若我们程序是想在someone这个变量的后面紧接着显示name字符,则上面的标签应该改成${someone}name。
4、"!
"用来强制把不存在的变量显示为空白。
如当页面中包含$msg,如果msg对象有值,将显示msg的值,如果不存在msg对象同,则在页面中将显示$msg字符。
这是我们不希望的,为了把不存在的变量或变量值为null的对象显示为空白,则只需要在变量名前加一个“!
”号即可。
如:
$!
msg
我们提供了五条基本的模板脚本语句,基本上就能满足所有应用模板的要求。
这四条模板语句很简单,可以直接由界面设计人员来添加。
在当前很多EasyJWeb的应用实践中,我们看到,所有界面模板中归纳起来只有下面四种简单模板脚本语句即可实现:
A)、$!
obj 直接返回对象结果。
如:
在html标签中显示java对象msg的值。
$!
msg
在html标签中显示经过HtmlUtil对象处理过后的msg对象的值
$!
HtmlUtil.doSomething($!
msg)
$!
HtmlUtil.doSomething($!
msg)
B)、#if($!
obj)#else#end判断语句
如:
在EasyJWeb各种开源应用中,我们经常看到的用于弹出提示信息msg的例子。
#if($msg)
alert('$!
msg');
#end
上面的脚本表示当对象msg对象存在时,输出