我想弄清楚這樣做的最好方法,不知道這是我的編碼還是我只是錯過了一些東西。MVC模式和數據庫設計
我試圖重構我們的內部傳真應用與教條(1.2)和使用MVC - 當收到傳真時,它會進入列表。然後,用戶可以選擇要做的事情 - 目前正在轉發,歸檔或碎化。
當他們挑那些之一,生成傳真工作流操作哪個插入帖子見下表分爲:
fax_id | from_status_id | to_status_id | completed | cancelled
最初狀態空表示「unactioned」
STATUS_ID在fax_status表中查找一行。
目前,代碼看起來像這樣
Controller:
function action_shred($fax_id)
{
$fax = Doctrine_Core::getTable('fax')->findOneById($fax_id);
// error handling for checking it exists and belongs to the user
$fax->shred();
}
,並在模型
function shred()
{
$wf = new FaxWorkFlow();
$wf->fax_id = $this->id;
$wf->from_status_id = $this->status_id;
$wf->to_status_id = Doctrine_Core::getTable('fax_status')->findOneByStatus("Shredded")->id;
$wf->completed = 0;
$wf->cancelled = 0;
$wf->save();
$this->status_id = Doctrine_Core::getTable('fax_status')->findOneByStatus("Queued")->id;
}
我也發現有類似的東西尋找排隊的傳真問題,我必須做到以下幾點:
$queued_id = Doctrine_Core::getTable('fax_status')->findOneByStatus("Queued")->id;
$queued_faxes = Doctrine_Core::getTable('fax')->findByStatusId($queued_id);
這有沒有什麼問題,或者有沒有更好的方法呢?我只是覺得代碼看起來非常難看,而且在傳真模型中搜索查找值似乎非常困難(應該將它轉移到傳真流模型中嗎?)
對狀態值進行硬編碼是非常誘人的在模型中,但如果它們在未來發生變化,那會導致問題。
總體來說,我只是想找的東西,如果我到目前爲止得到的意見是「正確的」,或者如果我需要看看重新編碼我走的太遠沿着這條路
對於你想要解決的問題,你能更精確一點嗎?是的,代碼是醜陋的 - 我會將「傳真」和「傳真工作流程」分解成單獨的類並隱藏數據庫內容。 – 2011-03-29 07:30:43
我不知道_doctrine_所以也許我的問題很愚蠢,但是......爲什麼你將狀態表建模爲「from_status_id/to_status_id」?我過去曾經在相當複雜的狀態轉換系統上工作過,對我而言,我有「動作」+「狀態」(例如,:「粉碎」/「完成」)感覺更自然。 – 2011-03-29 07:31:15
@ p.marino我這樣建模的原因是因爲一個項目可以多次排隊,所以它提供了一個歷史記錄 - 例如它已經從存檔轉到粉碎。這是工作流程表中的三條記錄 – 2011-03-29 07:56:28