
たまたま、java で開発することになったので
このカテゴリーで質問します。
(どちらかというとオブジェクト指向に関する質問かも)
現在、RDBにアクセスする際の
エンティティクラスをjavaで作成しようと
しています。
で、エンティティの単位とは
どのような単位で作成するものかと悩んでいます。
具体的には、
売上明細 というテーブルがあったとして、
売上明細エンティティ としては、売上明細の
レコードをそのまま取得できる形で考えていますが、
売上明細の集計情報を知りたいときは
その売上明細エンティティが集計情報を返すのか?
という意見が出ました。
その意見を出した人の論理では、売上明細エンティティは、
”売上明細”そのものであって、その情報を取得
するときには、集計だろうがどのような形でも
”売上明細”に関する情報を返却するのが正しい
ということです。
わたしとしては、”売上明細”の集計ということで
あれば、それは既に別の実態であり、別のエンティティである
と考えるわけですが、どちらの理論がよいでしょうか
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
多分質問者さんはEJBでのエンティティ詳細設計を指示されたと仮定して話を進めます。
最近の流れから言って、EJBという重いもので開発するのもどうかと思うのですが、それは質問者さんに関係ないでしょうから、以前経験したアドバイスを。
もちろんプロジェクトによってエンティティの定義は違いますが(ER図で言うエンティティは置いといて)、月別担当者別実績、とか、月別店舗別実績、とか、古い時代の考え方では、SQL文をこねくりまわして作っていた部分を、利用モジュール側がSQLを考えるのではなく、与えたパラメタでコレクション(Listとか)が返ってくる単位でメソッドを作成してあげればいいでしょう。
ですから、売上集計は売上明細とは別カテゴリだと思うのであれば、明細と集計のエンティティクラスを分ければいいのですし、売上結果としてひとつの単位で扱うことが多い(特に画面のラジオボタン程度の分岐でしかない)のであれば、ひとつのモジュールにしてしまっても構いません。
もっと明確な答えが欲しいのであれば、クラス図なり、ER図を設計した人に線引きを任せるべきであって、実装者が"技術的な部分でない"クラス分けを考えるのはおかしい話です。
もし質問者さんがまさに今設計しているのであれば、問題の回答はここよりも、設計レビューで出ると思われます。
No.2
- 回答日時:
RDB が絡むか絡まないかで、考えが変わってくると思います。
RDB が絡まない場合、純粋にオブジェクト指向の範疇で考えますと、この場合でもやっぱり、売上明細クラス自体に集計機能を持たせるか、それとも集計機能を外に出すか、という2つのやりかたのどちらにすれば良いかで悩みます。
巷の、初心者向けの書籍を見ると、売上明細クラスの中に集計機能を持たせることが多いようです。一方、私の個人的な好みとしては、外に出せるものはできるだけ外に出したほうが良いと思います。外部でできることをわざわざ内部でやる必要はありません。集計といっても、合計だけならまだしも、平均や標準偏差などの種類があります。これらのバリエーションが増えるたびにクラスのメソッドが増えるのは変だと考えます。
ただし RDB が絡むと話が変わってきます。集計である SUM や AVG 等は SQL の段階で済ませてしまうほうが高速になります。1レコードずつ SELECT して、それの合計をしても100倍位遅いだけで別に悪くはないですが、でも、それをやるのはやっぱり躊躇してしまいます。だから RDB が絡む場合は、集約機能は内包させることに落ち付くことが多いと思います。
No.1
- 回答日時:
ここでいう「エンティティ」とは何でしょうか?
辞書上は「本体」とか「それそのもの」といった意味になります。
なので、質問文を見ると「エンティティとは、データ自体を格納しておくテンポラリ領域である」と「エンティティとは、データを入出力するためのプログラムである」という2つの解釈が成り立ってしまい、あなたがどっちを意識しているのか分かりません。
もし前者であれば、集計結果の出力形態が同じ場合、同じエンティティを使いまわすことが可能でしょう。
ですが後者であれば、プログラムの形態そのものが変わってきますし、引数の内容も違ったものになります。またメソッド名も違ってくるでしょうから、エンティティは区別する必要があります。
これは「理論的にどっちが正しいか」ではなく、「どっちがやりやすいか」で区別すべき問題です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(税金) 事業復活支援金の事前確認ってどこまでチェックされるのでしょうか? 1 2022/04/22 11:55
- その他(ビジネス・キャリア) 事業復活支援金の事前確認での売上高チェックについて 2 2022/03/26 13:47
- 財務・会計・経理 事業復活支援金の事前確認について 2 2022/04/11 16:07
- 離婚・親族 別居後10年以上たって、離婚する場合の財産分与における、株式の評価額に関して 2 2023/06/10 15:59
- Excel(エクセル) エクセルで、未来の月の数値を表示させないようにしたい 1 2022/05/07 18:58
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(ビジネススキル・経営ノウハウ) クラウドファウンディングによる新製品の販売支援要求。「あれ?この商品、もう完成品じゃね?」という疑問 2 2022/08/22 12:32
- 消費税 国税庁からの調査員の責め方について 3 2022/09/14 20:26
- 医療・安全 Tカード会社、4千万人分の顧客データを販売へ…「同意」は有効か 5 2022/09/03 16:48
- その他(パソコン・スマホ・電化製品) PCに詳しい方に、質問です。 使用しているのは、TOSHIBAのPCで、多分なんですけど、アップデー 4 2023/01/28 03:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
携帯IApplicationのsuper
-
c# この高速化の方法あり? 2
-
[C@3331394などの文字列
-
クラスの直列化に関して
-
抽象クラスが継承されているか...
-
WinInet Classを用いてSSL接続方法
-
APIリファレンスはどこにありま...
-
スクロールバーについて
-
小規模のオープンソースについて
-
独自アプリのAPI公開方法について
-
JAVAでゲームを作ろうとしてい...
-
VC++ ATLコントロールのインス...
-
Adapterデザインパターン
-
エンティティの実装方法について
-
模範解答を・・・
-
スーパークラスとサブクラスに...
-
委譲って何ですか?
-
シンボルの解釈処理エラー
-
外部のクラスからコンテナをイ...
-
VC++2010の簡潔なマニュアルあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# 「データが失なわれる可能性...
-
「継承されたメソッドの可視性...
-
(vba)他のアプリケーションの右...
-
【C#】クラスのコンストラクタ...
-
VB DLLプロジェクトについて
-
メソッドの引数にクラス名を渡す
-
「ラッパークラス」の存在意義...
-
interface,extend,implementの...
-
c++でのヘッダーファイルの循環...
-
このエラーメッセージの意味を...
-
委譲って何ですか?
-
ゲッターを使わないで変数にア...
-
Javaのインスタンス化の構文の...
-
ファイルパスが取得出来ない(P...
-
ASP.NETでの共通コードの書き方...
-
Commons-Discovery.jarとは?
-
デバッグ時に「Source not found」
-
JTextFieldの入力制限
-
JavaのimplementsをC言語で例え...
-
オーバーライドとラッパーの違い
おすすめ情報