這已經困擾了我很長一段時間,但現在我有必要找到答案。使用原則來抽象CRUD操作
我們正在研究使用CodeIgniter和Doctrine的相當大的項目。
我們的應用程序有一個前端,也是公司管理區域,用於檢查/更改/刪除數據。
當我們設計的前端,我們簡單地消耗了大部分主義碼的右側控制器:
//In semi-pseudocode
function register()
{
$data = get_post_data();
if (count($data) && isValid($data))
{
$U = new User();
$U->fromArray($data);
$U->save();
$C = new Customer();
$C->fromArray($data);
$C->user_id = $U->id;
$C->save();
redirect_to_next_step();
}
}
顯然,當我們去到做管理的意見代碼重複開始,並考慮到我們是在一個「得到它完成「模式,所以它現在與代碼膨脹臭。
我已經使用模型方法將許多功能(業務邏輯)轉移到模型中,但基本的CRUD並不適合此處。
我打算嘗試將CRUD放入靜態方法,即Customer :: save($ array)[將執行插入和更新,具體取決於prikey是否存在於數組中],Customer :: delete($ id ),Customer :: getObj($ id = false)[如果爲false,則獲取所有數據]。儘管對於32個模型對象(並且在增長),這將變得很痛苦。
此外,有時模型需要進行交互(如用戶數據和客戶數據之間的上述交互),這不能在不破壞封裝的靜態方法中完成。我知道有一些地方需要3個「控制器」,我需要將這個CRUD封裝在某個地方(顯然),但是它們是靜態方法,還是有另一條路?
您的建議非常感謝。
這很有道理。我認爲我太想到了,模型必須以1:1的對象與表關係;需要在箱子外面多思考。謝謝。 – TomWilsonFL 2010-06-12 20:50:38