Showing
1 changed file
with
146 additions
and
146 deletions
1 | -## LUMEN+API Model规范 | 1 | +## LUMEN+API Model规范 |
2 | - | 2 | + |
3 | - | 3 | + |
4 | -### 1. Model规范 | 4 | +### 1. Model规范 |
5 | - | 5 | + |
6 | -* 使用Model实现数据业务处理,包括数据表和数据关联表的增删改查。 | 6 | +* 使用Model实现数据业务处理,包括数据表和数据关联表的增删改查。 |
7 | - | 7 | + |
8 | -* 对于各个表的Model, 继承自定义的BaseModel类,而不是Model类 | 8 | +* 对于各个表的Model, 继承自定义的BaseModel类,而不是Model类 |
9 | - | 9 | + |
10 | -* 如果表和表之间有一定的关系,1vs1, 1vsN,那在Model中使用hasOne,belongsTo进行映射,通过这样的映射,可以对Model对象实现很清晰的操作逻辑: | 10 | +* 如果表和表之间有一定的关系,1vs1, 1vsN,那在Model中使用hasOne,belongsTo进行映射,通过这样的映射,可以对Model对象实现很清晰的操作逻辑: |
11 | - | 11 | + |
12 | - ```php | 12 | +```php |
13 | - class GroupModel extends BaseModel { | 13 | +class GroupModel extends BaseModel { |
14 | - | 14 | + |
15 | - /** | 15 | + /** |
16 | - * @return GroupModel | 16 | + * @return GroupModel |
17 | - */ | 17 | + */ |
18 | - public function getInstanceByGroupCode($code) { | 18 | + public function getInstanceByGroupCode($code) { |
19 | - return $this->where('group_code',$code)->first(); | 19 | + return $this->where('group_code',$code)->first(); |
20 | - } | 20 | + } |
21 | - | 21 | + |
22 | - public function weixinGroupInfo() { | 22 | + public function weixinGroupInfo() { |
23 | - return $this->hasOne(WeixinGroupInfo::class,'group_id','group_id'); | 23 | + return $this->hasOne(WeixinGroupInfo::class,'group_id','group_id'); |
24 | - } | 24 | + } |
25 | - | 25 | + |
26 | - /** | 26 | + /** |
27 | - * @return WeixinGroupInfo | 27 | + * @return WeixinGroupInfo |
28 | - */ | 28 | + */ |
29 | - public function myWeixinGroupInfo() { | 29 | + public function myWeixinGroupInfo() { |
30 | - return $this->weixinGroupInfo()->first(); | 30 | + return $this->weixinGroupInfo()->first(); |
31 | - } | 31 | + } |
32 | - | 32 | + |
33 | - public funciton groupSites() { | 33 | +public funciton groupSites() { |
34 | - return $this->hasMany(GroupSite::class,'group_id','group_id'); | 34 | + return $this->hasMany(GroupSite::class,'group_id','group_id'); |
35 | - } | 35 | +} |
36 | - | 36 | + |
37 | - /** | 37 | +/** |
38 | - * @return Collection | 38 | + * @return Collection |
39 | - */ | 39 | + */ |
40 | - public function myGroupSites() { | 40 | +public function myGroupSites() { |
41 | - return $this->groupSites->get(); | 41 | + return $this->groupSites->get(); |
42 | - } | 42 | +} |
43 | - | 43 | + |
44 | - public function getMyGroupName() { | 44 | +public function getMyGroupName() { |
45 | - return isset($this->group_name) ? $this->group_name : null; | 45 | + return isset($this->group_name) ? $this->group_name : null; |
46 | - } | 46 | +} |
47 | - } | 47 | +} |
48 | - | 48 | + |
49 | - $groupInstance = (new GroupModel())->getInstanceByGroupCode('Foo'); | 49 | +$groupInstance = (new GroupModel())->getInstanceByGroupCode('Foo'); |
50 | - $groupWeixinInfoInstance = $groupInstance->myWeixinGroupInfo(); | 50 | +$groupWeixinInfoInstance = $groupInstance->myWeixinGroupInfo(); |
51 | - $groupSites = $groupInstance->myGroupSites()->filter( function($site) {/**/ }); | 51 | +$groupSites = $groupInstance->myGroupSites()->filter( function($site) {/**/ }); |
52 | - | 52 | + |
53 | - | 53 | + |
54 | - ``` | 54 | +``` |
55 | - | 55 | + |
56 | -* Model必须实现数据表的增删改操作,不能让这些操作暴露在Controller或者Service中 | 56 | +* Model必须实现数据表的增删改操作,不能让这些操作暴露在Controller或者Service中 |
57 | - | 57 | + |
58 | - ```php | 58 | +```php |
59 | - class UserModel extends BasicModel | 59 | +class UserModel extends BasicModel |
60 | - { | 60 | +{ |
61 | - public function insertUser(array $userInfo) { /**/ } | 61 | + public function insertUser(array $userInfo) { /**/ } |
62 | - public function updateUser(array $userInfo) { /**/ } | 62 | + public function updateUser(array $userInfo) { /**/ } |
63 | - /* 如有必要,更新字段的操作颗粒度可以降底到每一项 */ | 63 | + /* 如有必要,更新字段的操作颗粒度可以降底到每一项 */ |
64 | - public function updateUserLoginName ($userId,$userName) {/**/} | 64 | + public function updateUserLoginName ($userId,$userName) {/**/} |
65 | - public function deleteUserById($userId) {/**/} | 65 | + public function deleteUserById($userId) {/**/} |
66 | - } | 66 | +} |
67 | - ``` | 67 | +``` |
68 | - | 68 | + |
69 | -* Model层函数的返回,都要写明注释(尤其是参数和返回值类型),以便Controller调用时,可以智能感知和减少错误发生的机率。 | 69 | +* Model层函数的返回,都要写明注释(尤其是参数和返回值类型),以便Controller调用时,可以智能感知和减少错误发生的机率。 |
70 | - | 70 | + |
71 | - ```php | 71 | +```php |
72 | - /** | 72 | +/** |
73 | - * 增加一个新的用户,成功的情况下,返回用户对象 | 73 | +* 增加一个新的用户,成功的情况下,返回用户对象 |
74 | - * @param array userInfo | 74 | +* @param array userInfo |
75 | - * ['userName','userSex','userDesc'] | 75 | +* ['userName','userSex','userDesc'] |
76 | - * @result App\Models\User | 76 | +* @result App\Models\User |
77 | - */ | 77 | +*/ |
78 | - public function insertUser(array $userInfo) { | 78 | +public function insertUser(array $userInfo) { |
79 | - $this->arrValidation($userInfo, [ | 79 | + $this->arrValidation($userInfo, [ |
80 | - 'userName' => 'required|string|min:6' | 80 | + 'userName' => 'required|string|min:6' |
81 | - ]); | 81 | + ]); |
82 | - $newUser = new User(); | 82 | + $newUser = new User(); |
83 | - $newUser->user_name = userInfo['userName']; | 83 | + $newUser->user_name = userInfo['userName']; |
84 | - $newUser->user_sex = isset($userInof['userSex']) ? $userInfo['userSex'] : GlobalSystem::MALE; | 84 | + $newUser->user_sex = isset($userInof['userSex']) ? $userInfo['userSex'] : GlobalSystem::MALE; |
85 | - $newUser->user_desc = isset($userInof['userDesc']) ? $userInfo['userDesc'] : ''; | 85 | + $newUser->user_desc = isset($userInof['userDesc']) ? $userInfo['userDesc'] : ''; |
86 | - | 86 | + |
87 | - $newUser->save(); | 87 | + $newUser->save(); |
88 | - | 88 | + |
89 | - return $newUser; | 89 | + return $newUser; |
90 | - } | 90 | +} |
91 | - ``` | 91 | +``` |
92 | - | 92 | + |
93 | -* 不要使用scope类型的函数。 | 93 | +* 不要使用scope类型的函数。 |
94 | - | 94 | + |
95 | -* 在函数上区分并辩明属于Model的方法和属于Instance的方法。 | 95 | +* 在函数上区分并辩明属于Model的方法和属于Instance的方法。 |
96 | - | 96 | + |
97 | - > 所谓Model方法,是指new一个Model实例即可调用的方法,对于操作库,可以使用Model方法 | 97 | + > 所谓Model方法,是指new一个Model实例即可调用的方法,对于操作库,可以使用Model方法 |
98 | > | 98 | > |
99 | - > 所谓Instance方法,是指对应的数据表中的一个实例,例如,通过User::find(1)即可获得一个Instance方法。 | 99 | + > 所谓Instance方法,是指对应的数据表中的一个实例,例如,通过User::find(1)即可获得一个Instance方法。 |
100 | > | 100 | > |
101 | - > Instance方法一般用来获得属性,实现实例的业务逻辑,操作与此实例关联的其它数据模型的实例。 | 101 | + > Instance方法一般用来获得属性,实现实例的业务逻辑,操作与此实例关联的其它数据模型的实例。 |
102 | > | 102 | > |
103 | - > 一般来说,在Instance方法上,加一个My修饰词进行表示。 | 103 | + > 一般来说,在Instance方法上,加一个My修饰词进行表示。 |
104 | - | 104 | + |
105 | - ```php | 105 | +```php |
106 | - public function insertUser(array $userInfo); // Model方法 | 106 | +public function insertUser(array $userInfo); // Model方法 |
107 | - public function getMyUserName() { return $this->user_name; } // Instance方法 | 107 | +public function getMyUserName() { return $this->user_name; } // Instance方法 |
108 | - public function checkMyRoles() { /**/ } | 108 | +public function checkMyRoles() { /**/ } |
109 | - ``` | 109 | +``` |
110 | - | 110 | + |
111 | -* 在Model层所实现的业务逻辑上,要把业务边界分清楚,比如对于Group/Site这样的业务来说,Group可以代理Site的一些操作,但是具体涉及到Site数据操作,需要交给Site模型进行。 | 111 | +* 在Model层所实现的业务逻辑上,要把业务边界分清楚,比如对于Group/Site这样的业务来说,Group可以代理Site的一些操作,但是具体涉及到Site数据操作,需要交给Site模型进行。 |
112 | - | 112 | + |
113 | - ```php | 113 | +```php |
114 | - class Group extends BaseModel | 114 | +class Group extends BaseModel |
115 | - { | 115 | +{ |
116 | - /* 假设groupInfo中涵盖了site的信息 */ | 116 | + /* 假设groupInfo中涵盖了site的信息 */ |
117 | - public function receiveGroupInfoEvent($groupInfo) { | 117 | + public function receiveGroupInfoEvent($groupInfo) { |
118 | - $this->updateGroup($groupInfo); | 118 | + $this->updateGroup($groupInfo); |
119 | - if(isset($groupInfo['sites'])) { | 119 | + if(isset($groupInfo['sites'])) { |
120 | - $this->updateGroupSites($groupInfo['sites']); | 120 | + $this->updateGroupSites($groupInfo['sites']); |
121 | - } | 121 | + } |
122 | - } | 122 | + } |
123 | - | 123 | + |
124 | - public function updateGroup($groupInfo) { | 124 | + public function updateGroup($groupInfo) { |
125 | - // do group update | 125 | + // do group update |
126 | - } | 126 | + } |
127 | - | 127 | + |
128 | - public function updateGroupSites($siteList) { | 128 | + public function updateGroupSites($siteList) { |
129 | - foreach($siteList as $siteInfo) | 129 | + foreach($siteList as $siteInfo) |
130 | - (new Site())->updateSite($siteInfo); | 130 | + (new Site())->updateSite($siteInfo); |
131 | - } | 131 | + } |
132 | - } | 132 | +} |
133 | - ``` | 133 | +``` |
134 | - | 134 | + |
135 | -* BaseModel的一些基本操作 | 135 | +* BaseModel的一些基本操作 |
136 | - | 136 | + |
137 | - | 索引 | 函数方法 | 备注 | | 137 | +| 索引 | 函数方法 | 备注 | |
138 | - | ---- | ----------------------- | ---------------------------------------- | | 138 | +| ---- | ----------------------- | ---------------------------------------- | |
139 | - | 1 | getInstanceById | Model方法,根据关键字获得Instance对象 | | 139 | +| 1 | getInstanceById | Model方法,根据关键字获得Instance对象 | |
140 | - | 2 | getMyId | Instance方法,获得主ID | | 140 | +| 2 | getMyId | Instance方法,获得主ID | |
141 | - | 3 | getTable | Model方法,获得数据表名称 | | 141 | +| 3 | getTable | Model方法,获得数据表名称 | |
142 | - | 4 | toSql | Model方法,查询时可以将其转换为SQL语句 | | 142 | +| 4 | toSql | Model方法,查询时可以将其转换为SQL语句 | |
143 | - | 5 | getQueryByConditions | Model方法,基础的条件查询,一些场合下可以代替where语句 | | 143 | +| 5 | getQueryByConditions | Model方法,基础的条件查询,一些场合下可以代替where语句 | |
144 | - | 6 | checkValidItem | Model方法,查询符合条件的数据有多少项 | | 144 | +| 6 | checkValidItem | Model方法,查询符合条件的数据有多少项 | |
145 | - | 7 | updateItemsByPrimaryId | Model方法,根据ID更新数据表项 | | 145 | +| 7 | updateItemsByPrimaryId | Model方法,根据ID更新数据表项 | |
146 | - | 8 | updateItemsByConditions | Model方法,根据条件更新数据表项 | | 146 | +| 8 | updateItemsByConditions | Model方法,根据条件更新数据表项 | |
147 | - | 9 | checkObjectIdExist | Instance方法,检查调用实例是否Instance对象,如果不是,则抛出异常 | | 147 | +| 9 | checkObjectIdExist | Instance方法,检查调用实例是否Instance对象,如果不是,则抛出异常 | |
148 | - | 148 | + |
149 | - ? | 149 | + |
150 | 150 | ... | ... |
-
Please register or login to post a comment