ARCA架構:以 ACTIVE RECORD 為軸心的架構
越來越多的framework本身提供Active Record實作。 不管是Rails的Active Record,還是Laravel的Eloquent, 這些Active Record實作的功能越來越豐富而強大。 它讓開發速度更快了,但也因為太多功能塞在一起,容易寫出極度肥胖的萬能類別。 該怎麼使用這種萬能類別,又不至於讓它胖到難以維護呢? 我從工作中整理出了稱之為ARCA的架構。今天來跟各位分享。 註:本文程式碼多以Laravel框架舉例。但是相關概念通用在任何擁有Active Record的語言/框架。 簡介 ARCA全名「Active Record Centered Architecture」, 也就是「Active Record中心架構」,以Active Record為主軸的軟體架構。 ARCA試圖在享受Active Record帶來的開發速度的同時,拉出一定的架構。 這套架構適用於中型以上(連續開發3個月以上)專案,不適用於小型專案(像是餐廳官網)。 ARCA架構 ARCA架構由幾個元素組成,檔案結構看起來如下(以MVC舉例): 一個元素會是一個資料夾,或是一個檔案(類別)。 /View資料夾 /Controller資料夾 /Model資料夾 …./Entity Model資料夾 ……../Entity類別 ……../Repository類別 ……../Presenter類別 ……../Form類別 …./Service資料夾 ……../Service類別 …./Operation Model資料夾 Entity Model資料夾 擺放與一種entity相關概念的程式碼。 將一種entity相關的程式碼放在同一個資料夾。 Entity類別 entity是公司在乎的商業領域(domain)中,代表現實世界的一種事物。 常見的entity包含訂單、商品、顧客、禮券、文章。 通常會代表現實生活中的一種事物、需要具備ID。 在ARCA中負責直接繼承Active Record的類別。 這是ARCA架構的重點所在。遵照少數的類別命名、資料表命名慣例(convention), 直接賦予這些entity類別多種能力: 物件property存進...