teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

432閲覧

Javaのifの記述とDTOへの追加について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/08/15 01:28

0

0

前提

①batch_idを引数に、下記DBのテーブルからコード値(code_value)を取得
尚、code_valueは他のバッチ処理で更新されることがあり、batch_idによってcode_valueの上限は異なります。

batch_idcode_value
JKL-0950
HJK-0121
BBD-2421
KSG-673

②List型のDTOを返却(List<batchCodeDto>

③取得したコード値を元に、設計書で記載された文字列を、返却されたListに追加して返却
見づらくて申し訳ないですが、0:新規登録の場合、取得したcode_valueが0だったら、"新規登録"という文字列を追加で返却したい意図になります。

batch_idcode_value
JKL-0950:新規登録, 1:更新, 2:削除
HJK-0120:個人, 1:法人
BBD-2420:直接契約, 1:請負契約, 2:業務委託, 3:準委任契約, 4:派遣契約
KSG-670:月初締め・清算が15日/振り込みが25日, 1:月初締め・清算が月末/振り込みが1日, 2:月末締め・清算が翌月15日/振り込みが翌月25日, 3:月末締め・清算が翌々月末/振り込みが翌々月1日, 4:10日締め・清算が25日/振り込みが翌月1日

質問

上記③にもありますが、取得したcode_valueの値から、紐づく文字列をcontent変数としてListに追加したいのですが、
・DTOにcontentを用意しておいて、そこに格納するのが定石でしょうか?それとも後からロジックで返却されたオブジェクトに追加するものでしょうか?
・if文は以下コードのような記載だと冗長な気がするのですが、スマートな記述がありましたらご教示ください。

該当のソースコード

java

1// テーブルからデータ取得後のロジックのみ記述 2if (batch_id.equals("JKL-095")) { 3 if (code_value == 0) { 4 content = "新規登録"; 5 } else if (code_value == 1) { 6 content = "更新"; 7 } else if (code_value == 2) { 8 content = "削除"; 9 } 10} else if (batch_id.equals("HJK-012")) { 11 if (code_value == 0) { 12 content = "個人"; 13 } else if (code_value == 1) { 14 content = "法人"; 15 } 16} else if (batch_id.equals("BBD-242")) { 17 if (code_value == 0) { 18 content = "直接契約"; 19 } else if (code_value == 1) { 20 content = "請負契約"; 21 } else if (code_value == 2) { 22 content = "業務委託"; 23 } else if (code_value == 3) { 24 content = "準委任契約"; 25 } else if (code_value == 4) { 26 content = "派遣契約"; 27 } 28} else if (batch_id.equals("KSG-67")) { 29 if (code_value == 0) { 30 content = "月初締め・清算が15日/振り込みが25日"; 31 } else if (code_value == 1) { 32 content = "月初締め・清算が月末/振り込みが1日"; 33 } else if (code_value == 2) { 34 content = "月末締め・清算が翌月15日/振り込みが翌月25日"; 35 } else if (code_value == 3) { 36 content = "月末締め・清算が翌々月末/振り込みが翌々月1日"; 37 } else if (code_value == 4) { 38 content = "10日締め・清算が25日/振り込みが翌月1日"; 39 } 40} 41 42// 別のリストに詰め替えて返却すべき? 43batchCodeDto.add(content);

補足情報(FW/ツールのバージョンなど)

java17

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/08/15 05:52

回答にありますが、前提として表にしているものを何故テーブルにしないのでしょうか。 また、 コードにするなら表から map や配列を使えることは明白と思いますが、何故 if の塊にしているのでしょうか。
退会済みユーザー

退会済みユーザー

2023/08/15 07:07

テーブルについてはおっしゃる通りなのですが、今回は諸々の要因でこのような形になってしまっています。 mapや配列については全件取得してから必要な値を取り出すということでしょうか?
jimbe

2023/08/15 07:27 編集

>今回は諸々の要因でこのような形 つまりデータベースに文字列を持たせるのは(今回は)無しでということですかね。 理由は不要ですが、そのような条件的なこと質問に書いておいて頂いたほうが良いです。 map 等のことは、 shiketa さんの回答と同様なコードをイメージしています。(code_value → content 文字列の変換は String 配列のつもりです。)
guest

回答2

0

システムの要件・事情次第にもよりますが、個人的には以下のようなコードマスタのようなものを用意することが好みです。

batch_id(PK)code_value(PK)content
JKL-0950新規登録
JKL-0951更新
JKL-0952削除
HJK-0120個人
HJK-0121法人
BBD-2420直接契約
BBD-2421請負契約
BBD-2422業務委託
BBD-2423準委任契約
BBD-2424派遣契約
KSG-670月初締め・清算が15日/振り込みが25日
KSG-671月初締め・清算が月末/振り込みが1日
KSG-672月末締め・清算が翌月15日/振り込みが翌月25日
KSG-673月末締め・清算が翌々月末/振り込みが翌々月1日
KSG-67410日締め・清算が25日/振り込みが翌月1日

contentが必要な場合は、batch_idとcode_valueをキーにこのテーブルをSELECTします。あるいは①に記載されているテーブルとこのコードマスタをJOINしてもよいです。

投稿2023/08/15 03:54

neko_the_shadow

総合スコア2395

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/08/15 07:08

何故か諸々要因でこのような形になってます。 本来であればDBに持たせるべきですよね。 ご回答ありがとうございます。
guest

0

ベストアンサー

定石は知りませんが、たとえばなら、こうするかな。

java

1public class batchCodeDto { 2 3 private String batch_id; 4 private int code_value; 5 6 public String getContent() { 7 return HOGEGE.get(batch_id).get(code_value); 8 } 9 10 private static final Map<String, Map<Integer, String>> HOGEGE = 11 Map.of( 12 "JKL-095", Map.of( 13 0 , "新規登録", 14 1, "更新", 15 2, "削除" 16 ), 17 "HJK-012" , Map.of( 18 0, "個人", 19 1, "法人" 20 ), 21 "BBD-242", Map.of(/* ... */) 22 ); 23}

投稿2023/08/15 02:22

編集2023/08/15 02:29
shiketa

総合スコア4133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/08/15 07:05

ありがとうございます。 キーバリューでセットしておいて取り出すということですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問