一、团队成员
丁玉庆 1500802089
李晓晨 1500802116
马荣贞 1500802105
申琼娇 1500802118
马雯莉 1500802087
逯 香 1500802088
二、编码规范
PHP编码规范
. 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>" 。这是为了防止多余的空格或者其它字符影响到代码。
例如:
<?php
$foo = 'foo';
- 缩进应该能够反映出代码的逻辑结果,尽量使用四个空格,禁止使用制表符TAB,因为这样能够保证有跨客户端编程器软件的灵活性。
例如:
if (1 == $x) {
$indented_code = 1;
if (1 == $new_line) {
$more_indented_code = 1;
}
} - 变量赋值必须保持相等间距和排列。
例如:
$variable = 'demo';
$var = 'demo2'; - 每行代码长度应控制在80个字符以内,最长不超过120个字符。因为 linux 读入文件一般以80列为单位,就是说如果一行代码超过80个字符,那么系统将为此付出额外操作指令。这个虽然看起来是小问题,但是对于追求完美的程序员来说也是值得注意并遵守的规范。
- 每行结尾不允许有多余的空格。
二、命名约定
- 类文件都是以“.class.php“为后缀,且类文件名只允许字母,使用驼峰法命名,并且首字母大写,例如:DbMysql.class.php 。
- 配置和函数等其他类库文件之外的文件一般是分别以“.inc.php“和”.php“为后缀,且文件名命名使用小写字母和下划线的方式,多个单词之间以下 划线分隔,例如config.inc.php , common.php,install_function.php 。
- 确保文件的命名和调用大小写一致,是由于在类Unix系统上面,对大小写是敏感的。
- 类名和文件名一致(包括上面说的大小写一致),且类名只允许字母,例如 UserAction类的文件命名是UserAction.class.php, InfoModel类的文件名是InfoModel.class.php 。
- 控制器类以Action为后缀,例如 UserAction、InfoAction ,模型类以Model为后缀,例如UserModel、InfoModel ,其他类也分别以相应分类为后缀,例如Service 、Widget。
- 方法名只允许由字母组成,下划线是不允许的,首字母要小写,其后每个单词首字母要大写,即所谓的 “驼峰法命名” 规则,且越详细越好,应该能够描述清楚该方法的功能,例如switchModel、findPage。
- 属性的命名只允许由字母组成,下划线是不允许的,首字母要小写,其后每个单词首字母要大写,即所谓的 “驼峰法命名” 规则,例如tablePrefix、tableName 。
对于对象成员的访问,我们必须始终使用 “get” 和 “set” 方法。例如:
{
class Foo
{
protected $_testObj;
public function getTestObj()
return $this->_testObj;
}
public function setTestObj($testObj)
{
$this->testObj = $_testObj;
}
}- 当类成员方法被声明为 private 时,必须分别以双下划线 "__"为开头;被声明为 protected 时,必须分别以单下划线 "_" 为开头;一般情况下的方法不含下划线。例如 :
class Foo
{
private function __example()
{
// ...
}
protected function _example()
{
// ...
}
public function example()
{
// ...
}
} - 如果我们需要把一些经常使用的方法定义为全局函数,那么应该把它们以静态 (static) 的形式定义在类中。例如:
class Think
{
// ...
static public function autoload($classname)
{
// ...
}
} - 被声明为 private的类成员属性必须由双下划线 "__" 作为开头;被声明为 protected 的类成员属性必须由下划线 "_" 作为开头;而声明为 public 的成员属性则在任何时候都不允许含有下划线。
- 函数的命名使用小写字母和下划线的方式,且越详细越好,应该能够描述清楚该函数的功能,例如 get_client_ip 。
- 当方法或函数参数不一定需要被赋值的时候,用 "null" 来代替 "false" 作为函数参数的默认值,除非该参数是 boolean 值。
- 变量只允许由小写字母和下划线组成,且建议用描述性的变量的命名,越详细越好,以至于像 $i 或 $n 等等都是不鼓励使用的。
- 类中的常量 constant 和全局范围内常量define,只能由大写字母和下划线组成,各个单词之间以下划线分割。
boolean 值和 null 值都采用小写。
HTML编码规范
1.1 缩进与换行
[强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符。
示例:
- first
- second
[建议] 每行不得超过 120 个字符。
解释:
过长的代码不容易阅读与维护。但是考虑到 HTML 的特殊性,不做硬性要求,sublime、phpstorm、wenstorm等都有标尺功能。
1.2 命名
[强制] class 必须单词全字母小写,单词间以 - 分隔。
[强制] class 必须代表相应模块或部件的内容或功能,不得以样式信息进行命名。
示例:
[强制] 元素 id 必须保证页面唯一。
解释:
同一个页面中,不同的元素包含相同的 id,不符合 id 的属性含义。并且使用 document.getElementById 时可能导致难以追查的问题。
[建议] id 建议单词全字母小写,单词间以 - 分隔。同项目必须保持风格一致。
[建议] id、class 命名,在避免冲突并描述清楚的前提下尽可能短。
示例:
[强制] 同一页面,应避免使用相同的 name 与 id。
解释:
IE 浏览器会混淆元素的 id 和 name 属性, document.getElementById 可能获得不期望的元素。所以在对元素的 id 与 name 属性的命名需要非常小心。
一个比较好的实践是,为 id 和 name 使用不同的命名法。
示例:
1.3 标签
[强制] 标签名必须使用小写字母。
示例:
Hello StyleGuide!
Hello StyleGuide!
[强制] 对于无需自闭合的标签,不允许自闭合。
解释:
常见无需自闭合标签有input、br、img、hr等。
示例:
[强制] 对 HTML5 中规定允许省略的闭合标签,不允许省略闭合标签。
示例:
- first
- second
- first
- second
[强制] 标签使用必须符合标签嵌套规则。
解释:
比如 div 不得置于 p 中,tbody 必须置于 table 中。
示例:
[建议] HTML 标签的使用应该遵循标签的语义。
解释:
下面是常见标签语义
p - 段落
h1,h2,h3,h4,h5,h6 - 层级标题
strong,em - 强调
ins - 插入
del - 删除
abbr - 缩写
code - 代码标识
cite - 引述来源作品的标题
q - 引用
blockquote - 一段或长篇引用
ul - 无序列表
ol - 有序列表
dl,dt,dd - 定义列表
示例:
Esprima serves as an important building block for some JavaScript language tools.
[建议] 在 CSS 可以实现相同需求的情况下不得使用表格进行布局。
解释:
在兼容性允许的情况下应尽量保持语义正确性。对网格对齐和拉伸性有严格要求的场景允许例外,如多列复杂表单。
[建议] 标签的使用应尽量简洁,减少不必要的标签。
示例:
2.数据库命名原则
数据库命名要遵从以下命名原则:
表意性原则:数据库命名本着表意性原则,即命名应尽量反映存储/action/view/column的数据内容。
长名原则:很少使用或者不使用缩写,适用于DB命名之外的任一对象
数目最少化原则:数据库对象应该尽量满足数据最小化原则,也就是数据库数目,存储过程,视图等数量最小化。
2.1 数据库版本控制
当由于多个版本的应用系统同时存在或者是其它特殊原因而使用完成相似的功能的对象存在同时存在时,使用版本控制:版本号在对象名的后面加上[_v1]
如:
Up_IM_DailyUsageStatsUpdate_v2
Up_IM_CustomerGetUsingLastName_v2
2.2 Server/命名实例的命名
基于Domain命名, DOMAIN 的粒度,可分为三级 ,分别是Server级别,Database级别和表的前缀级别。此为第一级别。
1. ONLINE PRODUCTION SERVER
NEWSQL
NEWSQL2
EHISSQL
WAREHOUSE PRODUCTION SERVER
S3SQL01
S4SQL01
S7SQL01
S6SQL01
2.3 数据库命名
数据库命名应当遵从上面所提及到的协定,包括没有特殊的字符,使用文字数据字式字符……..,项目代码命名不应该同样被数据库使用.数据库名字应该唯一以避免冲突等.以Domain来标识, 拆分DATABASE,基于大的逻辑范畴,如operation 范畴以及部门类别,另外:其它与部门相关的DATABASE 可以放到相关的SERVER 下。
数据库数目最少化原则
数据设置尽可能MERGER原则
peration database AND Dept level Database set up rules
拆分DATABASE,基于大的逻辑范畴,如operation 范畴以及部门类别
其它与部门相关的DATABASE 可以放到相关的SERVER 下。
下面为与OPEARATION 相关的DATABASE示例:
如: 下面为与OPEARATION 相关的DATABASE:
ItemProfile
Inventory
Codecenter
CustomerProfile
SalesOrder
Accounting
Sevice(RAM)
eCommerce
SupplerChainManagement
DropShip
SerialNumber
WorkFlow
ShippingCarrier
WarehouseManagment
HumanResource
其它与部门相关的DATABASE 可以放到相关的SERVER 下。
MKT
Pm
Mis
CUSTOMER SVR
ADMIN
ACCOUNTING
- INTERNAL DEPT DATABASE SERVER
2.4 数据库对象—表,视图,列名,约束,规则,默认值
数据库对象应该被清晰的命名,要确认不存在歧义。数据库对象的名字应该包括自己尽可能多的信息,并要详细的说明与之相对应的项目文档.选择合适的命名空间是一个很让人困惑的问题(比如我们不能从一个存储过程的命名上看到是哪个项目在使用这个对象),命名名字唯一的在数据库级别标识自己,无论在哪儿使用它,请确保在一个项目中命名方法的一致.在一个小的上下文看来很清晰的对象在一个大的上下文中可能就会丢失他的含义.节省击键次数永远不能用来作选择名字的标准.
下面供述了数据库对象的命名协定,所有的数据库对象命名都应该遵循下面协定.
如果不是长度限制,缩写应该被避免.当使用缩写时应该遵从下面的缩写规范的规则.缩写应该在项目范围内保持一致并被存档.
不要使用特殊的字符;对文字数字式字符加以限制.
在命名时为了更好的标识表与应用程序之间的关系,我们要使用“[function name]|[main module name]_表名”的形式.
比如: Newegg_customer
Blocked_customer
Abs_customer
EDI_....
MDF_....
当要修改一个对象的架构时,首先要确认与之存在依存关系的对象不受影响.要查看与之存在依存关系的对象,可以在企业管理器中”右键相应对象”->”ALL TASKS”->”DISPLAY DEPENDENCIES”来查看或者使用系统存储过程SP_DEPENDS来查看:
EXEC SP_DEPENDS 'dbo.GetCategories’
当底层表结构更改时,视图都应该被重新创建.这个应该特别被注意,特别是视图是使用如”SELECT * FROM table”时.
强烈建议任何时候都不要使用类似于”SELECT * FROM”的语句.
当在不存在事务上下文中或者是完整性要求不是很高时,在SELECT语句中使用WITH NOLOCK.
2.5 缩写规范
由于长度的限制而需要使用缩写时,应当遵从以下的规则:
以分类单词作为名字的起始.
缩写的第一个字符应该与单词的第一个字母相同,比如,SFER就不是Transfer的有效缩写.
Identify and abbreviate the root word, usually the shortest form of the word.
缩写时省略元音字符,除非特殊原因,重复字符中将被省略一个。
缩写不应该暗示到其它的单词(比如:单词“parent”可能被缩写为”PRNT”,但是“PRNT”很容易让人想起单词“PRINT”,一个比较好的缩写就是使用”PSRNT”)
相似单词的缩写应该一致,比如如果Charge缩写为CHRG,则change应该被缩写为CHNG.
当组合词或者短语被广泛使用时,并且大多人都能识别出这些缩写时,应该使用他们的首字母缩写,因为大多人都能识别出这些缩写。
三、数据库
四、ER图
五、功能流程图
六、项目分工
丁玉庆----设计数据库
李晓晨----构建系统整体框架及数据库
马荣贞----流程图制作
申琼娇----功能模块划分
马雯莉----编码规范
逯 香----ER图
七、组员成绩
丁玉庆 10分
李晓晨 10分
马荣贞 10分
申琼娇 10分
马雯莉 10分
逯 香 10分