2012-02-06 69 views
1

我正在使用三個不同的類:組,段和字段。每個組是一個或多個分段的集合,每個分段是一個或多個字段的集合。 Field基類的子類有不同類型的字段。也有不同類型的段是所有段基類的子類。子類定義段中預期的字段類型。在任何部分中,一些定義的字段必須具有輸入的值,而一些可以省略。我不知道該元數據的存儲位置(段中的給定字段是可選還是必需的)。結構設計模式

什麼是存儲此元數據的最乾淨的方式?

+1

如果Field是一個類,你可以存儲一個標誌作爲一個成員,指出它是可選的還是強制的?然後,Segment類可以在字段創建新字段時對其進行設置。 – kevintodisco 2012-02-06 22:10:01

+0

是的,那樣做。不知道爲什麼我沒有想到這個... – tabdulla 2012-02-06 22:13:29

回答

1

我不確定您是否提供了有關完整應用程序的足夠信息以獲得最佳答案。但是這裏有一些可能的方法:

  1. 在默認情況下返回true定義一個isValid()的方法在你的基類。在您的子類中,如果缺少任何需求,您可以爲每個Segment或FieldType編寫特定邏輯以返回false。如果要報告錯誤消息以說明缺少哪些字段,可以將List參數添加到isValid方法以允許每個類型報告缺失值的列表。

  2. 使用註釋(如上面AlexR所述)。

上述兩種方法的好處是元數據在代碼中,直接綁定到需要它的對象。缺點是,如果您想更改必填字段,則需要更新代碼並部署新版本。

如果您需要某些可以隨時更改的內容,那麼對於Xml的Gangus建議是一個好的開始,因爲您的應用程序可以在運行時重新加載Xml定義並生成不同的驗證結果。

0

我認爲,這種數據的最佳位置將是普通的XML文件。爲了處理這些數據,最好的結構也是使用XPATH的XMLDOM。與課程一起工作太複雜了。

0

由於Java 5已發佈,因此可以使用註釋存儲此類元數據。定義您自己的註釋@MandatoryField並用它標記所有必填字段。然後,您可以使用反射來逐字段地發現對象,並檢查未啓動的字段是否爲必需字段,並在此情況下引發異常。