該層為業務的抽象,采用OOP思想進行業務相關的封裝與繼承。
并不是一個Model就對應一個表,要做到高內聚低耦合的關鍵在于對象的邊界一定要劃分清晰,如何“拆”才是關鍵。
* CURD
## 注:一般情況下非復用性函數無需寫在Model里邊(必須同一個函數有>=2個地方調用)。
本身Model應該是繼承了框架的模型,它已經自帶了一些數據的操作方法,下邊列舉一個【反例】來說明:
~~~php
{
public function save(Post $post);
public function byId(PostId $id);
public function all();
public function byCategory(CategoryId $categoryId);
public function byTag(TagId $tagId);
public function withComments(PostId $id);
public function groupedByMonth();
// ...
}
~~~
如果這些函數實現的操作,都只在【一個地方使用了一次】。這樣封裝進Model是沒有復用性的意義的。
定義Model的關聯模型操作與其他屬性的方法不在限制之內。
> 注意事項:
> 1. 一般情況下建議直接return object,盡量不要做數組的拼裝返回。
> 3. 禁止在模型中使用事務處理,防止事務嵌套。
- 一、概述
- 二、項目建議
- 三、樣例代碼
- 3.1 代碼風格
- 3.2 普通業務處理流程示意圖
- 3.3 事務業務處理流程示意圖
- 四、命名規范
- 五、注釋標準
- 5.1 方法函數
- 5.2 非config文件
- 5.3 修改代碼
- 5.4 數組參數
- 六、MVC建議
- 七、分層描述
- 7.1 控制器 [ Controller ]
- 7.2 驗證器 [ Validate ]
- 7.3 服務層 [ Service ]
- 7.4 模型層 [ Model ]
- 八、輸出標準
- 8.1 控制器 Response
- 8.2 驗證器 Bool
- 8.3 模型 Model | Exception
- 8.4 服務層 Mixed
- 九、其他說明
- 十、模型說明