Toggle navigation
Toggle navigation
This project
Loading...
Sign in
qingger
/
allProject
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
shipfi
2017-03-30 19:14:19 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
22444979673db8af2ef1b8103c3a5ccd20f6b274
22444979
1 parent
9ac2fc9a
Rules
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
71 additions
and
19 deletions
Docs/Rules/doc_rules.md
Docs/Rules/lumen_rule_controller.md
Docs/Rules/lumen_rule_model.md
Docs/Rules/php_rule.md
Docs/Rules/doc_rules.md
0 → 100644
View file @
2244497
## 开发文档规范
### 1. 概要
*
公司中,开发文档全部使用md文件,上传到项目对应的Gitlab中。
*
文档写作辅助工具包括:
*
Typora / MarkdownPro : MD文档撰写工具
*
XMind : 思维导图工具
*
Visio : 流程图工具
*
任何一个项目,以下文档不可缺,且随着开发的不断进行,也需要不断的更新
*
API接口文档 及 API接口特别说明文档
*
数据库文档
*
与其它系统交互的系统交互文档
*
功能复杂的流程图
*
代码文件的phpDoc文档
---
### 2.API文档
#### 2.1 API文档做成约定
API文档默认放在各项目 S2_Project | P1_API 目录下。此目录定义了暴露给外部应用的每个接口的参数和返回值。
在写API文档时,规约包含以下几个方面:
*
各个API必须以独一的形式进行编号。
*
每个API文档必须定义版本,在应用层上的版本和API文档的版本必须一致。
*
API文档必须给出地址的PATH路径值。
*
API文档必须给出调用的HTTP方法: GET | POST | DELETE | PUT
*
API文档必须给出应答的格式,默认为JSON
*
API的请求参数必须要详细说明,说明包括:
> 类型 / 是否必须 / 备注
>
> 如果参数不同,带来的返回值有很大的差异,在需要说明的情况下,也必须落实成文档。
*
API的返回值的参数也必须要详细说明。说明包括:
> 返回示例,返回各数据的类型, 返回各数据的详细说明。
*
如果有些返回值是可选的,也需要给出说明。
*
每个API文档下方必须要存在更新备注信息。当每一次更新API,除了修改文档,也在下方写明备注原因。
*
因升级,过时的API必须标注为depreciated.
*
如果此API依赖于其它的系统交互,需要给出其它系统流程的文档跳转地址。
*
对于复杂的API(如用户验证、支付、订单流转等),需要额外定义文档,
Docs/Rules/lumen_rule_controller.md
View file @
2244497
...
...
@@ -103,7 +103,7 @@
}
```
*
Controller通过调用Model层,自定义Service层,Event, Queue来完成自身的业务逻辑。但是在Controller层,尽量做到对于底层服务的底耦合,为了能够更好的测
度
,也尽量使用对象的依赖注入。
*
Controller通过调用Model层,自定义Service层,Event, Queue来完成自身的业务逻辑。但是在Controller层,尽量做到对于底层服务的底耦合,为了能够更好的测
试
,也尽量使用对象的依赖注入。
*
Controller层与其它层的一般关系如下
...
...
Docs/Rules/lumen_rule_model.md
View file @
2244497
...
...
@@ -7,7 +7,7 @@
*
对于各个表的Model, 继承自定义的BaseModel类,而不是Model类
*
如果表和表之间有一定的关系,1vs1, 1vsN,那在Model中使用hasOne,belongsTo进行映射,通过这样的映射,可以对Model对象实现很清晰的操作逻辑:
*
如果表和表之间有一定的关系,1vs1, 1vsN,那在Model中使用hasOne,belongsTo
,hasMany
进行映射,通过这样的映射,可以对Model对象实现很清晰的操作逻辑:
```
php
class GroupModel extends BaseModel {
...
...
@@ -50,7 +50,6 @@ $groupInstance = (new GroupModel())->getInstanceByGroupCode('Foo');
$groupWeixinInfoInstance = $groupInstance->myWeixinGroupInfo();
$groupSites = $groupInstance->myGroupSites()->filter( function($site) {/**/ });
```
*
Model必须实现数据表的增删改操作,不能让这些操作暴露在Controller或者Service中
...
...
@@ -92,19 +91,19 @@ public function insertUser(array $userInfo) {
*
不要使用scope类型的函数。
*
在函数上区分并辩明属于Model
的方法和属于Instance
的方法。
*
在函数上区分并辩明属于Model
对象的方法和属于Instance对象
的方法。
> 所谓Model方法,是指new一个Model实例即可调用的方法,对于操作库,可以使用Model方法
> 所谓Model
对象的
方法,是指new一个Model实例即可调用的方法,对于操作库,可以使用Model方法
>
> 所谓Instance
方法,是指对应的数据表中的一个实例,例如,通过User::find(1)即可获得一个Instance方法
。
> 所谓Instance
对象可调用的方法,是指对应的数据表中的一个实例,例如,通过User::find(1)即可获得一个Instance对象
。
>
> Instance方法一般用来获得属性,实现实例的业务逻辑,操作与此实例关联的其它数据模型的实例。
>
> 一般来说,在Instance方法上,加一个My修饰词进行表示。
```
php
public function insertUser(array $userInfo); // Model方法
public function getMyUserName() { return $this->user_name; } // Instance方法
public function insertUser(array $userInfo); // Model
对象的
方法
public function getMyUserName() { return $this->user_name; } // Instance
对象的
方法
public function checkMyRoles() { /**/ }
```
...
...
Docs/Rules/php_rule.md
View file @
2244497
...
...
@@ -105,7 +105,7 @@
define('CURRENT_SCRIPT','index_php');
const TRANSCATION_TYPE = 'income';
// 私有变量
(protected不在此列)
// 私有变量
private $orderCnt = 0;
protected $salaryAmount = 0;
...
...
@@ -133,7 +133,6 @@
*
自编写的类一般遵循名词或名词短语来进行命名。
*
类的动作方法 ,一般使用【动词+名词】方式进行命名,例如 sendMessage / getAttr / setAttr / postLogin等
*
类的属性和变量字段,使用小写字母或者小写驼峰方式命名
*
类的private字段和方法,**必须**使用带_前缀的方式命名
*
常量值,统一使用大写。
*
如果方法为API由外部调用,不允许修改方法签名,避免对接口调用方产生影响。
*
所有继承的覆写方法,必须加@Override 注解
...
...
@@ -151,7 +150,7 @@
*
所有的类、函数、方法定义都需要进行注释。
*
类、方法、函数统一使用/
** 内容 */ 注释格式, 不得使用 //
**
方式
*
类、方法、函数统一使用/
**
内容
*
/ 注释格式, 不得使用 // 方式
*
方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/
* *
/注释,注意与代码对齐。
...
...
@@ -294,8 +293,6 @@
method('a', 'b', 'c');
```
?
*
在类中(尤其是在Model),对于每个属性的访问, 统一使用get/set方法
```php
...
...
@@ -363,7 +360,7 @@
}
```
*
代码做到复用,对于相同
听
代码逻辑,严禁出现在两个函数或者两个文件内,如果逻辑相同,使用重构提取共用性。必要时抽取共性方法,或者抽象公共类,甚至是共用模块。
*
代码做到复用,对于相同
的
代码逻辑,严禁出现在两个函数或者两个文件内,如果逻辑相同,使用重构提取共用性。必要时抽取共性方法,或者抽象公共类,甚至是共用模块。
*
一个函数的逻辑实现**严禁**超过一屏(非常特殊或者逻辑简单可理解的除外)。如果业务复杂,使用多个函数实现。
...
...
@@ -377,8 +374,6 @@
if ($existed) { /*...*/ }
```
?
*
一个函数中**不能**出现以下复杂的if/else逻辑判断, 一个规则,每个函数只if/elseif/else嵌套不超过三层。
*
逻辑上超过 3 层的 if-else 代码可以使用卫语句或状态模式来实现,关于 [卫语句](http://blog.csdn.net/jw903/article/details/45506777)。
...
...
@@ -445,7 +440,6 @@
foreach($items as $key=>$item) {
// do sth
}
```
?
...
...
@@ -469,7 +463,6 @@
*
注意日志输出的级别,error 级别只记录系统逻辑出错、异常等重要的错误信息。
---
...
...
@@ -482,7 +475,6 @@
*
在应用代码中使用“抛异常”代替“返回错误码”,应用如果是API,则对异常作出处理,返回匹配的Result结果信息。
---
...
...
@@ -497,3 +489,4 @@
!
[
](http://of2xnjf2g.bkt.clouddn.com/20170329172942.png)
?
...
...
Please
register
or
login
to post a comment