资源描述
Javashop开发规范V2.2
版本
说明
提交人
V1.0
初稿
定义了包名、异常、事务、和路径的规范
王峰
V2.0
1. 重新整理了命名规范
2. 增加常用命词对照表
王峰
V2.1
1. 增加数据库操作的说明
2. 增加常用方法介绍
王峰
V2.2
增加关于数据导入导出的说明
王峰
1 命名规范
1.1 包命
1. 小写字母
2. 以com.enation.javashop开头
3. 组件以poent开头
1.2 类名
一、 action
以Action结尾,如:UserAction
二、 业务类
1.接口:
以I开头,以Manager结尾,如:IUserManager
2.实现类
以Manager结尾,如:UserManager
三、 组件类
以Component结尾,如:ShopEmailComponent
四、 挂件类
以Widget结尾,如:MemberAddressWidget
五、 插件类
以Plugin结尾,如:SendRegMailPlugin
1.3 变量/属性命名规则
1. 全部小写
2. 可用下划线连接
如:username、 userid
1.4 方法命名
1.4.1 Action类
add
到添加页
edit
到修改页
saveAdd
保存添加
saveEdit
保存修改
delete
删除
list
列表
1.4.2 业务类
add
添加
edit
修改
delete
删除
list
列表
get
读取详细
2 数据库开发规范
2.1 数据操作支持类
一、 业务类数据库调用
1.继承于BaseSupport
2.在spring文件中声明parent为baseSupport
<bean id="xxxManagerImpl" class="xxx.xxx.xxx.XxxxManager" parent="baseSupport"/>
3.通过this.baseDaoSupport操作数据库
实际使用的是:com.enation.eop.sdk.database.BaseJdbcDaoSupport
此种操作示例:
com.enation.javashop.core.service.impl.BrandManager
注意事项:见【BaseDaoSupport的意义和存在的问题】
二、 直接声明baseDaoSupport操作数据库
在一些挂件类中或某些特殊情况,可以直接需要直接声明baseDaoSupport
此种操作示例:
com.enation.javashop.core.service.impl.batchimport.GoodsSpecImporter
注意事项:见【BaseDaoSupport的意义和存在的问题】
2.2 BaseDaoSupport的意义存在的问题
BaseDaoSupport对JdbcDaoSupport进行包装,通过 baseDBRouter 获取表名,
为什么要通过 baseDBRouter 来获取表名呢?Eop机制是支持SAAS(多租户)模式运行的,在SAAS会为每个用户提供如:es_goods_<userid>_<siteid>这样的表。
为了保证在单机版和SAAS模式中都运行正常,BaseDaoSupport将过滤sql中的相应表名。
但目前还只能支持简单的单表select、insert、update,对于多表的联合查询或更新不能支持。
在这种情况下,就需要通过
daoSupport(com.enation.framework.database.impl.JdbcDaoSupport)来操作,daoSupport不对sql进行任何更改,这时为了保证兼容saas模式兼容性,就要使用BaseSupport.getTableName(String tablename)方法
或baseDBRouter.getTableName(String tablename);来保证表名的正确。
(够混乱?真心希望出现一位大侠拯救这个状况,使basedaosupport可以处理所有情况的sql)
2.3 实体Bean和数据库表对照
Javahop数据库操作支持,将对象直接保存或修改,如:
this.baseDaoSupport.insert("brand", brand);
this.baseDaoSupport.update("brand", brand, "brand_id="
+ brand.getBrand_id());
规则为:实体中的属性名和数据库表的字段名相同,如:
对应的数据库字段:
2.4 注解的使用
2.4.1 @NotDbField
在某个实体Bean中,我们可能会有一些属性不对应数据库字段,这时我们需要在相应的
Geter方法中加上@NotDbField注解,以便使数据库机制知道这个字段不转为sql语句,如:
private File file;
@NotDbField
public File getFile() {
return file;
}
2.4.2 @PrimaryKeyField
在实合格bean和数据库对照过程中,数据库机制需要识别主键,所以需要我们在主键的对应属性的Geter方法中加上@PrimaryKeyFiled注解,如:
private Integer brand_id
@PrimaryKeyField
public Integer getBrand_id() {
return brand_id;
}
3 数据导入
3.1 导入接口
DBSolutionFactory.dbImport("file:com/enation/javashop/component/coupon/add.xml","es_");
3.2 数据Xml文件说明
3.2.1 创建表
<action>
<command>create</command>
<table>tablename</table>
<field>
<name>id</name>
<type>int</type>
<size>8</size>
<option>11</option>
</field>
<field>
<name>name</name>
<type>varchar</type>
<size>255</size>
<option>00</option>
</field>
</action>
3.2.2 删除表
<action>
<command>drop</command>
<table>tablename</table>
</action>
3.2.3 添加、删除列
<action>
<command>alter</command>
<table>goods</table>
<field type="add">
<name>isgroupbuy</name>
<type>int</type>
<size>1</size>
<default>0</default>
</field>
<field type="drop">
<name>isgroup</name>
</field>
</action>
3.2.4 创建索引
<action>
<command>index</command>
<table>goods</table>
<field >
<name>goodsid</name>
</field>
</action>
3.2.5 删除索引
<action>
<command>unindex</command>
<table>goods</table>
<field >
<name>goodsid</name>
</field>
</action>
3.2.6 插入数据
<action>
<command>insert</command>
<table>es_adcolumn</table>
<fields>acid,cname,width,height,atype,disabled</fields>
<values>5,'列表页上部横幅','972px','67px',0,'false'</values>
</action>
3.2.7 删除数据
暂未支持
3.2.8 更新数据
暂未支持
3.3 数据类型对照表
xml
Mysql
Oracle
SqlServer
int
int
NUMBER
smallint
int(1)
smallint(1)
NUMBER(2)
int
memo
text
CLOB
text
datetime
datetime
TIMESTAMP
datetime
long
bigint
NUMBER
bigint
decimal
decimal
NUMBER(20,2)
decimal
4 数据导出
String[] tables = new String[1];
tables[0] = "es_auth_action";
DBSolutionFactory.dbExport(tables, false, "")
5 常用方法介绍
5.1 上下文获取
参见:
5.2 地区联动下拉框
1.如果是在jsp 中:
<html:regionselect></html:regionselect>
2. 如果是在Freemarker的html中:
<#assign
RegionSelect= "ponent.widget.regions.RegionSelectDirective"?new()>
<@RegionSelect />
以上两种方式均支持以下参数:
province_id:省id
city_id:市id
region_id:区id
如果指定上述参数,则默认选中
6 常用字典对照表
6.1 常用值
名称
值
说明
返回结果
0:失败
1:成功
适用于:
1. 客户端json返回值
2. 服务器端方法返回值
3. 数据库是否的标识值
性别
0:女
1:男
6.2 常用名称
名称
英文
商品
goods
货品
product
规格
spec
订单
order
会员
member
积分
point
购物车
cart
结算
checkout
订单
order
品牌
brand
分类
cat
优惠劵
coupon
支付
payment
团购
groupbuy
虚拟
virtual
发票
receipt
属性
prop
参数
param
标签
tag
地区
region
7 异常
1. 提供统一的异常处理机制
2. 底层级别的类不处理异常,只管向上抛出异常,且统一抛出RuntimeExcepton
8 事务处理
1. 数据库统一使用Srping AOP事务
2. 采用注解方式:
在接口处:
@Transactional(propagation = Propagation.REQUIRED)
9 路径的规范
返回的路径变量最后不带 ‘/’
如:String path =”user/1”;
使用者: path = path+”/”+myVar;
10 样式/HTML规范
10.1 前台分页
<div class="page"><span class="info">共41条记录</span>
<span class="info">1/3</span>
<ul><li><a class="selected">1</a></li>
<li><a href="search-cat-4-page-2.html" class="unselected">2</a></li>
<li><a href="search-cat-4-page-3.html" class="unselected">3</a></li>
<li><a href="search-cat-4-page-2.html" class="unselected">>></a></li>
<li><a href="search-cat-4-page-3.html" class="unselected">>|</a></li>
</ul></div>
展开阅读全文