2013-07-01 66 views
1

我經常編寫對數據庫實體具有依賴性的代碼。我想最大限度地減少這些不同系統之間的耦合(或使其明確而健壯)。如何處理數據庫條目的依賴關係

示例:我有一個下拉列表的錯誤類別,用戶可以定義新的類別,但是一個類別是特殊的,屬於它的錯誤會得到一個額外的輸入字段。因此,系統需要知道用戶何時選擇了特殊類別,並且該特殊類別不允許消失。

你將如何處理該特殊類別?你會匹配類別名稱或ID嗎?你會把這個實體放在遷移中,還是讓你的代碼根據需要重新生成它?你是否從數據庫中省略它,並讓它只存在於你的代碼中?每次出現這個問題時,我都會發現自己會選擇新的解決方案,但我從來沒有對它們感到滿意。

有沒有人找到滿意的解決方案?你發現了什麼缺點,你是如何緩解它們的?

回答

1

我不喜歡特殊的大小寫代碼,所以我會將它設計爲全部在數據模型中。數據庫將得到一個可刪除字段,並且有一個特殊的輸入字段,用某種方式來描述那個特殊輸入是什麼。我也試圖確保我沒有過度設計特殊輸入的東西,因爲目前只有這種情況。

+0

所以你會添加一個觸發功能的列或類似的東西?比如說,當選擇特殊類別時,驗證規則會改變。你會檢查category.warrants_lax_validation – Jauco

+0

類別模式看起來像Id,Name,CanDelete,SpecialInput。這樣刪除代碼檢查CanDelete標誌,而不是硬編碼值。相同的特殊輸入,根據複雜性檢查標誌,外鍵或連接表。一般而言,代碼應該儘可能一般地處理數據,任何特殊的屬性或決策都應該由正在處理的數據驅動,而不是因爲執行處理的代碼認爲它知道發生了什麼。代碼應該知道如何識別和處理特殊情況,但不是先驗的。 – stonemetal