リファクタリング プログラミング Java

【Java】Enumを使って変更に強いコーディングをする!

投稿日:

概要

仕事でコード値の判定が色んなところに散らばってしまった後に、コード値の定義を変更しなければいけなくなった状況が起こりました。
Enumで定義していれば変更箇所はEnum定義だけでよかったなぁ~と思い、自戒の意味を込めて執筆致しました。

状況

  • 「なんちゃら種別」のような種別コード値と名称が複数定義されている
  • その定義の中に、「3:その他」が最後に定義されていた。
  • 新たに追加されることになった種別コードは「3」を使いたい。
  • そのため、「その他」は今後さらにコード値が追加されることを考慮して、
    「99:その他」にしたい。

実装

問題のあるコード

SalesOrderMain.java
アプリケーションのエントリーポイント(実行開始メソッド)

実行結果
一応ハードコーティングとEnum定義での両方でロジックが通っています。

if(3 == otherOrder.saleKindCode())
しかしここがハードコーディングになっているので、コード値の修正に対応していません。

SalesOrder.java
売上種別コードを持つオブジェクト

SalesKind.java
販売種別=3(その他)が定義されている状態

 

Enum定義で解消したコード

SalesOrderMain.java
アプリケーションのエントリーポイント(実行開始メソッド)
SalesOrderのインスタンス生成時の売上種別を99に変更しています。

 
実行結果
Enum定義で判定していたロジックのみ通っています。

if(3 == otherOrder.saleKindCode())
ここはハードコーディングしていたため、修正しなくてはならなくなりました。

SalesOrder.java
売上種別コードを持つオブジェクト
修正箇所は無いため割愛

SalesKind.java
販売種別=99(その他)に定義し直した状態

 

まとめ

  • コード値の判定ロジックはEnum定義などを利用し、変更に強い構造にしておくこと。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-リファクタリング, プログラミング, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

CSV/TSVデータを作成するVBAツールを公開

【追記:2020年8月1日】 UTF-8(BOM無し)に対応しました。 業務でテスト用のCSVファイルを作成することがよくあるので、自分でツールを作成しました。 TSVにも対応しています。 基本仕様 …

【JdbcTemplate】IN句に値を入れて複数件取得する方法

JdbcTemplateでIN句に毎回異なる数の値をセットして、 複数のレコードを取得する場合は、「NamedParameterJdbcTemplate」で取得することができます。 コード例 [cra …

SpringでNotNullなどのバリデーションが効かないときの対処法

状況 フィールドに入っている値は空文字なのに、 @NotNull, @NotEmpty, @NotBlankでエラーとして検知されない。 (BindingResultでhasErroe=0件となる) …

Jacksonで日付がずれる場合、Timezone設定を直す

現象 JacksonでCSV出力する際、日付がズレて出力される。   原因 タイムゾーンの設定がTokyo/Asiaになっていない。   対策 application.proper …

Redmineでリンクにできない場合にチェックすること

リンクにできない場合のチェック項目 前後に文字列がくっついている。 前後に全角スペースがある。 リンクの#が全角になっている。   リンクにするには? 以下のルールで記述すればリンクにできま …

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。