簡體   English   中英

java 1.5:保持db表列名的常量的最佳實踐?

[英]java 1.5: Best practice to keep constants for column name of db tables?

技術: - Java 1.5或1.6 - Hibernate 3.4

為了避免在更改列名或表名時更改多個位置上的列名,我希望有一個常量文件。

我有以下疑問?

  • 一種可能的解決方案是維護一個全局文件,該文件存儲數據庫中所有表的列名的常量。 喜歡

     class DbConstants { public static final String EMPLOYEE__PERFORMANCE_DESC="performance_desc"; } 

在上面的情況中,employees是表的名稱,performance_desc是列名的名稱。 因此,如果兩個表都有列名,則遵循一種tablename__columnname格式來命名一個常量,以避免兩個不同表的兩個常量之間發生沖突。

我看到這種方法的一個問題是,隨着數據庫的增長,此文件中的常量不會增加到數千個,這很難管理。 其他問題是如果更改了表名,我必須更改所有表的前綴表名。

  • 假設我將上面示例中的列名稱從performance_desc更改為achievement_desc。 在這種情況下,我很可能也想改變常數,即從EMPLOYEE__PERFORMANCE_DESC到EMPLOYEE__ACHIEVEMENT_DESC。 因為在這種情況下我需要更改列名和常量名稱我沒有看到在我的代碼中直接使用常量而不是列名的使用盡管有一個好處,在更改常量名稱時我可以使用折射來反映常量名稱名稱在引用的地方更改。 似乎要么沒有太多使用常量,要么我錯誤地使用它。

  • 在項目代碼中,我似乎有人為每個表列列表定義一個類來定義常量,如下所示。

     public class tbl_Employee { public static final PERFORMANCE_DESC=performance_desc; } 

這可以解決一些與全局文件一樣的問題,比如表名更改只會導致類名更改。 這個問題的一個主要問題是我使用類僅用於定義不是良好編碼實踐的常量。

  • 閱讀一些有關值字符串Enum的內容而不是int不確定它是否可用於java 1.5或1.6以及是否建議在給定方案中使用它。

  • 定義db常量的最佳做法是什么?

  • 使用db常量真的很有用嗎?

  • 如果我像上面提到的那樣為每個表使用一個類,我面臨的一個問題是命名約定。 表的名稱和對應的類名稱之間應該有什么關系,它們定義表的列的常量。

  • 以上案例僅涵蓋列名而非表名的情況。 我可能喜歡在代碼中使用常量而不是表名,因此應該采用什么方法來定義表名的常量。

  • 經常有人認為,一旦產品或相關版本發布,表名和列名就不會發生太大變化。 表名和列名的更改主要發生在開發階段或功能增強(新版本)期間。 避免對表名或列名使用常量是否是強有力的論據?

    請建議我如何才能使我的問題更具代表性,或者我錯過了哪些問題未被投票?

聽起來你問的是所有正確的問題 - 你想讓代碼更易於維護,但是你會意識到這可能會變得笨拙並最終導致代碼變得更糟而不是更好。 想想像“Color.RED,Color.BLACK”這樣的東西。

我發現像這樣的合理數量的常量使得代碼更具可讀性。 我不認為db列名屬於這樣的東西,因為

  • 它們不會經常被改變,或者至少它們不應該被改變

  • 有足夠的它們,你會以一大堆常量結束,此時人們停止使用它們,因為找到常量比在數據庫中查找該死的名字更難。

我已經看到像這樣的db文件有數千個常量,包括自定義查詢,部分查詢等等(甚至像public static final String COMMA=",";這樣的寶石public static final String COMMA=",";以處理逗號拼寫的可能性將來會改變)。 在這一點上,他們轉向“使用一次”字符串,沒有人敢改變它們。

另一個關於字符串常量的警告 - 韻母作為字符串被編譯到你的類中。 因此,如果您重新編譯常量類,而不是使用該定義的類,則最終可能不會傳播新定義。

您是否考慮過使用實體映射框架(如Hibernate)?

它可以將所有數據庫表信息(以及所有其他特定於DB的信息)存儲在配置文件中。 它還在“硬”數據庫設計和您的應用程序之間提供了一個分離層(這樣可以更容易地吸收對它們的更改)。

您可以創建一個定義常量的接口。

這是Android中的一個很好的例子 查找DataColumns接口。

在我目前的項目中,我們正在大量使用注釋來處理許多與DB相關的元數據,因為我們不能使用像Hibernate這樣的框架。 對於實際的列常量,是的,我們使用久經考驗的public static final String 是的,它相當脆弱。

當我有關於數據庫的元數據時,我也會將其存儲在數據庫中。 這是我看到其他系統運行的方式,如果不是最初那么最終。 為確保維護此數據,您可以檢查數據庫的架構。

暫無
暫無

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

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