其實整套分層的意義很簡單,不外乎圍繞的是根本原因:
`程序 = 數據結構 + 算法
`
所有的層的拆分都是圍繞著數據結構和算法來整理的,分層的根本意義也是為了讓邏輯更加清晰易懂,首先,來看看摘自TP官網的定義:
ThinkPHP支持模型的分層 ,除了Model層之外,我們可以項目的需要設計和創建其他的模型層。
通常情況下,不同的分層模型仍然是繼承系統的thinkModel類或其子類,所以,其基本操作和Model類的操作是一致的。
例如在index模塊的設計中需要區分數據層、邏輯層、服務層等不同的模型層,我們可以在模塊目錄下面創建model、logic和service目錄,把對用戶表的所有模型操作分成三層
數據層:app\index\model\User 用于定義數據相關的自動驗證和自動完成和數據存取接口
邏輯層:app\index\logic\User 用于定義用戶相關的業務邏輯
服務層:app\index\service\User 用于定義用戶相關的服務接口等
其實他官方的解釋已經挺清楚了,但是如果你沒有接觸復雜的業務可能不太理解這三層的定義,我逐個就我遇到的一些業務問題來做詳細的講解:
## 數據層
數據層在這里其實指的是數據庫表的數據,一般來說數據層會包含一整套相對于數據表的映射,這一套映射主要的是基本的字段名稱和數據類型的映射,比如數據表order里有一個字段叫做order_sn并且是16位的字符串類型,那么在數據層模型里可以定義這套映射,而這套映射的根本目的其實也是為了實現程序做最基礎的數據存儲類型的驗證,當然了,這套基本的自動驗證也是依賴于框架來實現的。
然后就是自定義的一些自動驗證了,比如數據類型是否是url,對數據進行安全過濾等等;也就是說,這一層完成數據的存儲處理。當然也可以完成一些查詢處理,如時間格式化等等。
## 邏輯層
邏輯層,從程序方面來思考,應該叫做算法層,這一層處理具體的一些數據的業務邏輯,或者做事務性的一次性存儲多個數據表數據等,這一層最好也把大的復雜邏輯盡量拆分成小的業務邏輯,減少業務的耦合性。主要做的還是與具體業務相關的業務邏輯。
## 服務層
服務層一般來說是直接與控制器打交道的,提供給控制器進行調用的一層,這一層可以讓多個控制器共用,而服務層所調用的數據業務層應該是邏輯層。
從以上三個方面來看,數據層可以說是程序的數據,而邏輯層是程序的算法;當然這個角度又是從宏觀角度來看待的。而服務層又能把各個邏輯關聯起來,起到很好的整體性,能提供給應用上層調用,減少代碼的冗余,可以更好的復用。
程序的根本就是思想,借鑒不同的語言特性思想,來表現不同的業務邏輯。