リファクタリング プログラミング 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


関連記事

【Java】文字列の完全一致と部分一致を判定する方法

Stringオブジェクトのmatches、containsメソッドを使った説明です。 戻り値:boolean ■追記(2022/5/4) ・前方一致にstartWithメソッドの用例 ・後方一致にen …

idea, intellij, jet, brain, jetbrain

【IntelliJ Idea】Spring Boot DevToolsの自動ビルドを有効にする設定

IntelliJ Ideaの場合、自動ビルドの設定を有効にする必要があります。 前提 Gradle、またはMavenプロジェクトで作成しているはずなので、 dependenciesにSpring Bo …

【JdbcTemplate】Queryの書き方(更新系)

  前提 以下のテーブル(users)を持ち、格納するのはUserクラスという想定で説明していきます。 usersテーブル

【SpringBoot入門】#10~ 更新機能の実装

概要 既に登録済みの書籍情報を画面上で編集し、更新する処理を実装します。 更新した内容が反映されていることを確認するところまでを行います。   フロントエンド 更新情報のリクエスト edit.html …

compiler.automake.allow.when.app.runningの設定が無くなっている件

概要 IntelliJのレジストリ設定から、 compiler.automake.allow.when.app.running が無くなっている件について、設定場所が変わっていたことのメモです。 仕様 …

SpringFramworkの良書

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

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