##JavaのBeanクラスについて分からないことがあるので質問させていただきます。
普段データベースのデータを扱う際には、目安として「1テーブル1Beans」という形で作成しております。
(例)
Employeeテーブル に対して Employee.java
Departmentテーブル に対して Department.java
Salaryテーブル に対して Salary.java
ただ、必ずしも一度に取得したいデータが1テーブル分のものとは限らず、複数のテーブルを結合して取得することが多いと思います。
そうなると1つのBeansクラスのインスタンス変数だけでは値を格納しきれなくなります。
また、データベースから取得した情報だけではなくユーザーがフォームに入力した情報を受け取り、それも同じBeanクラスに持たせたい、といった場面もあります。(本来はDBから取得した情報を保持するクラスとフォームから受け取った情報を保持するクラスは分けるべきでしょうが。)
その際、
「テーブルに対応するBeanは必ず作成する」
「インスタンス変数を追記することはできない(新しいクラスを作成する事は可能)」
という条件があるとしたら皆様どのように対応されますか?
私個人としては2つ考えがありまして、1つは「クラス型のインスタンス変数を持つ新しいクラスを作成する」です。
[Employee2.java] public class Employee2 { // Employeeクラス型のインスタンス変数 Employee emp; // Employeeクラスでは定義されていない追加したい情報 String str; int num; }
ただこれだとどのみち2つ分のクラスをインスタンス化しますし、データへのアクセスの仕方が少々めんどうだなと感じてしまいます。
もう一つの方法が試したことはありませんが質問にも記載した、「Beansクラスを拡張し新しいクラスを作成する」です。
[EmployeeAndMore.java] public class EmployeeAndMore extends Employee { // Employeeクラスでは定義されていない追加したい情報 String str; int num; }
こちらだとインスタンス化するクラスは一つで済みますし、データへのアクセスも容易に感じます。
ただ自分の経験上このような「Beansクラスを拡張したクラス」を見たことが無かったので、そもそも拡張(extends)の使い方として正しいのか含め疑問に思い質問させていただきました。
よろしくお願いいたします。
#追記
業務内容なので詳しく触れられない&私の頭で別の例に置き換える能力が無くわかりにくい質問になってしまってます、すいません。
この質問をした背景が、
・「1つのテーブルから必ず1レコードだけを取得するSQLが存在する」
・「view側で表示させるロジックの都合上、1つだけのクラスインスタンスをリストに格納したい」
・「既存のBeansクラスだけではview側で必要になる値を網羅しきれない」
・「DBから取得した情報プラスアルファを保持できるクラスを作成&インスタンス化し、それをリストに格納して渡したい」
という事があったからです。
必ずview側で展開するための情報をすべて保持したクラスを作らなければいけない場合、どうするのが正しいのかなと思い質問をしました。
#追記2
申し訳ありません。拡張と書いておりましたが、伝えたいニュアンスとしてはBeansクラスを継承したクラスを作ってもよいのか?です。
Beansクラスを拡張も視点が違うだけで間違いではないと思いますが、念のため。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。