2014-01-09 66 views
0

我正在開發一個電子商務網站。如何處理通用狀態?

在數據庫方面,我只有兩個狀態表。一個名爲StatusGroup的表(例如,產品狀態,訂單狀態等)和另一個名爲GlobalStatus的表。這是一對多的關係。它根據不同的statusGroup記錄所有狀態。

現在我的問題是,在C#方面,我該如何處理狀態?

例如,當我創建一個新產品時,它有一個狀態字段。現在,我對statusId進行硬編碼(從數據庫的GlobalStatus表中獲取並分配給產品)。

例如,productToCreate.StatusId = 111;它有效,但看起來很愚蠢。

當用戶更改StatusGroup表中的值時,確保我的c#代碼不會工作,因爲它是硬編碼的。

我正在考慮使用枚舉方法。生成枚舉列表並從數據庫中獲取數據。但在我的第二個想法,我想這不會工作,因爲枚舉是爲設計時間,如果有人再次更改數據庫中的值,它將無法正常工作...

我開車讓我困惑,我想知道如果有什麼建議嗎?我所需要的是能夠將statusId分配給我的對象的東西,即使有人更改了數據庫中的值,它仍然可以獲取正確的statusId。 (對於c#,由statusName輸入但不是statusId)

提前致謝。

+0

也許你需要表現出更多的代碼。我對你詢問的內容絕對無能爲力 - ( – trailmax

+0

)也許在內存中加載你的狀態表,並定義狀態列以指示應該在特定點設置哪種狀態,然後當你需要時可以找到正確的狀態它和一切都是完全動態和可配置的。 – TyCobb

回答

0

請勿將StatusID字段暴露給您的應用程序。

將一個索引(唯一)字段StatusDescription添加到您的狀態表中,並始終在StatusID上加入此表以嚮應用程序和用戶呈現相應的StatusDescription。也許定義一個包含這個連接的便捷視圖ItemView。

當必須選擇狀態值時,將StatusDescription字段呈現給用戶。

當更新一個項目的狀態:

update ItemTable 
    set StatusID = (
    select StatusID from Status where StatusDescription = @StatusDescription 
) 
where ... 

如果各種條件都滿足時,你甚至可以發現這個SQL工作得很好:

update ItemView 
    set StatusDescription = @StatusDescription. 
where ...