簡體   English   中英

層之間的枚舉映射

[英]Mapping of enum between layers

我有一個服務和此服務的api。 該服務有一個帶有20個值的枚舉。 但是我的API只有10個。我要做的是將20個服務枚舉映射到10個api枚舉。 但是,假設有人更改了該服務的枚舉? 有人添加了10個值,所以我們現在有30個枚舉,但是忘記/不知道如何更改映射。 然后,我們有10個未映射的枚舉,這些枚舉從未到達客戶端。 是否可以設計兩個枚舉之間的映射,所以如果它們中的任何一個發生了更改,那么我們例如會收到一個編譯時錯誤,指出存在未映射的枚舉值? 還是我覺得這里很不對勁? 也許通過單元測試可以確保枚舉中的所有值都映射到另一個?

編輯:

服務枚舉將具有更具技術性的枚舉,而api枚舉將僅具有應該更合乎邏輯的值?

服務枚舉:

  • JPA_ERROR(“說明”)
  • DATABASE_DOWN
  • SOMETHING_INVALID
  • SOMETHING_EXPIRED
  • 暫停服務

API枚舉:

  • SOMETHING_INVALID
  • SOMETHING_EXPIRED
  • 暫停服務

我今天的映射僅僅是一個將服務枚舉作為參數並具有基本開關聲明的函數。 在默認語句中,我返回null,這就是困擾我的地方。 我不喜歡返回null,但我也不真正知道默認語句應該具有什么樣的行為。 這就是為什么我開始考慮是否可以“強迫”開發人員始終確保映射正確的原因。

function ApiEnum mapServiceEnumToApiEnum(ServiceEnum serviceEnum){
    switch(serviceEnum){
        case JPA_ERROR:
             return ApiEnum.SOMETHING_INVALID;
        case DATABASE_DOWN:
             return ApiEnum.SOMETHING_INVALID;
        default:
            return null; //Don't want this to happen...
    }    

這是一個抽象的問題-我不知道您如何將服務枚舉映射到您的枚舉,因此很難說出什么才是最有意義的。 但是您提到的方法是合理的。

未映射的枚舉異常

您當然可以檢查枚舉是否未映射,然后引發異常。 如果您希望在未映射的枚舉的情況下請求失敗,那可能是正確的方法。

記錄的未映射枚舉

如果您不希望請求失敗,則只想通知未映射的枚舉,可以將其記錄下來。 當然,這假定您實際查看日志的頻率足以檢測該日志消息。 如果不是這樣,日志記錄通常只會帶來更多噪音。

測試映射

在不了解有關體系結構的更多信息的情況下,很難說是否可以根據您的枚舉值檢查服務枚舉值的任何測試是否真的是單元測試。 如果您要處理的是遠程服務,那么它更像是一個集成測試,而這種集成測試可能由於其他原因而失敗(例如,測試計算機是否失去了與遠程服務的連接)。 不過,與日志消息相比,這可能是一種您更容易注意到的方法。

暫無
暫無

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

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