![](/img/trans.png)
[英]Which is better Java programming practice: stacking enums and enum constructors, or subclassing?
[英]Reference Table OR Java Enum which is better
我有一個數據庫實體:worker,基本上有兩種類型的worker,
我確信這個類型列表不會頻繁增長。
ID | 姓名 | worker_type_id |
---|---|---|
1 | 亞當 | 1 |
2 | 米爾恩 | 2 |
public class Worker{
private int id;
private int name;
private WorkerType type;
}
對於 Worker_Type 我有兩個選擇:
創建一個 WorkerType 的 Java ENUM
public enum WorkerType{ WorkerType(int id, String name){ this.id = id; this.name = name; } int id; String name; }
創建一個存儲 WorkerType 的引用表。
worker_type_id | worker_type_label |
---|---|
1 | 全職 |
2 | 兼職 |
我傾向於使用“1”,但我看到很多人都贊成“2”。 除了明顯的比較之外,我將如何在代碼中查詢工作表中的所有全職工作人員?
select * from worker join worker_type on worker.worker_type_id = worker_type.id where worker_type = 'Full Time';
我關於上述查詢的問題是我的代碼如何知道字符串“Full Time”? 如果有人錯誤地更改了標簽,則會完全破壞代碼。 我該如何處理?
您的示例代碼:
public enum WorkerType{
WorkerType(int id, String name){
this.id = id;
this.name = name;
}
int id;
String name;
}
......混淆了你的問題。 您正在將您的工人類型與您的實際工人混合在一起。
可能適合您情況的代碼是一個代表每個工人的類。
public record Worker( int id , String name , Classifation classifation ) {}
worker 的類型是一個單獨的枚舉,只有兩個命名對象(一個是全職的,一個是兼職的),並且不需要自定義構造函數。
public enum Classifation { FULL_TIME, PART_TIME }
我會在 worker 類中嵌套 type-of-worker 枚舉。 該嵌套清楚地表明,工作類型枚舉對象主要僅在該類中使用。
public record Worker( int id , String name , Classifation classifation )
{
public enum Classifation { FULL_TIME, PART_TIME }
}
用法:
Worker adam = new Worker( 1 , "Adam" , Worker.Classifation.FULL_TIME );
Worker milne = new Worker( 2 , "Milne" , Worker.Classifation.PART_TIME );
System.out.println( List.of( adam , milne ) );
跑的時候。
[工人[id=1, name=Adam, classifation=FULL_TIME], Worker[id=2, name=Milne, classifation=PART_TIME]]
你的標題要求:
參考表或 Java 枚舉哪個更好
至少有兩個因素需要考慮:
Java 中的枚舉用於在編譯時自動實例化一組有限的命名對象。 您不能在運行時更改枚舉。
如果在部署您的應用程序時此信息有任何更改的可能性,則枚舉是不合適的。 相反,您需要在運行時動態創建對象集合。
如果其他應用程序或DBA可能需要查找此信息,那么您應該將該信息記錄在數據庫中,而不是在您的 Java 應用程序中。
鑒於你的示例場景,我懷疑你可能要在數據庫中的Java都枚舉和查找參考表。
另一種方法是使用人類可讀的文本而不是普通整數作為WORKER_TYPE
列。 在您的情況下,存儲文本值,例如Full-time
& Part-time
或Full
& Part
。 在這種情況下,不需要循環參考表。 這種方法假設 (A) 沒有業務需要類型代碼( 1
或2
),並且 (B) 在描述工人類型時沒有更多的列需要跟蹤。
此外,在更復雜的數據庫中,您可以讓數據庫強制存儲在該列中的一組有限的可能值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.