簡體   English   中英

最佳實踐:使用枚舉或不存儲下拉值

[英]Best practice : use enum or not to store dropdown values

我正在開發一個應用程序,我經常問自己同樣的問題。

例如,我有許多類型的用戶,並且在用於創建用戶的表單中,有一個下拉列表,用於指定哪種類型的用戶。

填充此下拉列表的最佳方法是將值存儲在數據庫的表中? 如果我這樣做,當我開發時,我想測試用戶類型,我只有一個int。 但我認為使用枚舉進行測試是一種更好的做法。 所以我創建枚舉,但我覺得這是一個不好的做法,因為我必須保持數據庫和枚舉同步。

另一個問題是關於本地化。 如果我把值放在數據庫中,我就不能使用資源文件了。

你能告訴我這方面的好心情嗎?

謝謝

在你的情況下 - 數據庫將是這里的最佳實踐,特別是如果它的動態數據。 枚舉是針對那些很少改變的值,可能是偶爾但不是經常發生的。 您可能會定期在數據庫中輸入新條目,尤其是級聯下拉列表等內容。

數據庫肯定是你的情況的方式。 枚舉存在於那些只是一個標准並且很少改變的時候,例如:

小姐先生。太太女士博士

你會在枚舉中有這些,因為它們永遠不會真正改變。 另一方面,如果要更改或重命名商店部門,數據庫將是存儲此類條目的地方。

我強烈不同意使用枚舉這種功能,基本上有兩個原因:

  • 枚舉值沒有行為,因此妥協良好的OOP。 一個好的類具有數據+行為,因此枚舉成員不足以專門表示它們的命名概念。 關於這個域對象的邏輯生活在除了其名稱的實體之外的其他地方,我不喜歡。
  • 枚舉是為了傳達正常性,所以DaysOfWeek是一個很好的用法(除了一周中的哪一天是'第一'取決於文化,但是'挑剔),因為枚舉表示其成員的順序 在您的情況下,說某個特定值是“第一個”用戶類型,第二個值是第二個,依此類推是否有意義? 可能不是。

我的第一個問題是 - 你真的在數據庫中的任何地方使用用戶類型嗎? 如果答案是否定的,那么一切都會變得更容易,因為你可以簡單地使用枚舉並完成它。

否則,您可能還應該有一個用戶類型表,以便正確使用外鍵。

就個人而言,我使用手動ID - 自動生成的密鑰可能會使您嘗試同步代碼和數據庫變得混亂。 理想情況下,如果您的ORM允許,您可以通過代碼生成或自動數據庫數據更新自動進行代碼 - 數據庫同步。 但是,如果不能,那么手動編碼枚舉(或某種偽枚舉)應該在代碼中更好。

至於本地化,您的選擇完全相同。 只需使用“UserType-XXX”之類的資源鍵,其中XXX是該類型的數據庫ID。 如果需要,還可以將本地化值存儲在數據庫中。 只要做最適合您的應用的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM