• ベストアンサー

DTOとEntityの差は何ですか。

dtoとentityは DBと同じ名前と形式を持っているはずですね。 でも名前も違うし。。差異は何ですか。。。

  • Java
  • 回答数2
  • ありがとう数24

質問者が選んだベストアンサー

  • ベストアンサー
  • ecogilis
  • ベストアンサー率60% (12/20)
回答No.2

Entityを、Entity Beanとか、DBのテーブルとか、と解釈します。 DTOをData Transfer Objectのデザインパターンと解釈します。 自分なりの解釈ですが。。。 Entityは、データレコードを表現するクラスのことで、DTOは、EntityBeanとかのデータをAPの都合の良い形でモジュール間でやりとりするためのクラス設計方法の一つと思います。 例えば、複数のデータソースからデータを取得してそれらを最終的なUI上に表現したいとした場合、画面構築の際にデータソースそれぞれに都度取得要求しつつ画面構築するよりかは、一度DTOにまとめてから画面構築したほうが設計上も綺麗ですしソースもシンプルになると思います。 パフォーマンスの面で言えば、例えば、データソースを扱う複数のサーバ(DBとか)とAPサーバとフロントエンドのAP(UI)が動作するクライアントPCといった構成で、クライアントからAPサーバを介してデータソースにデータ要求をしたいとした場合、データソース別に都度ネットワーク越しにデータの要求とレスポンスを繰り返すよりかは、APサーバでDTOにまとめてから、一括でやりとりしたほうがパフォーマンス的には良いと思います。もちろん呼び出す側でもそれを意識した呼び出しが必要だと思いますけど。 「DBと同じ名前と形式を持っているはず」というのがそもそも認識誤りなのじゃないかなと思ってるんですけど、どうでしょ。

その他の回答 (1)

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.1

Data Transfer Object と Entity の語源から考えると 違うような違わないような、よくわからない(無知)んですが、 私は Entity:データベースのレコードをそのまんま格納する。 DTO:入力フォームなどのデータなど、アプリ内でやりとりするデータを格納する。DBに保存されるとは限らない。 と認識しています。 DTOをそのままEntityとして使う場合も多いので、混同されているのでしょう。

関連するQ&A

  • インターフェースオブジェクト、コントローラ、エンティティ、マネージャ

    まいどお世話になります。 今、書籍管理システムを作っているのですが、いまいちDBの仕組みがわかりません。UMLの本で、XX画面ーXXコントローラーXXエンティティーXXマネージャとありますが、各役割については詳しくかかれていないため、理解できませんでした。本のデータを入力してそのデータがDBに更新されたり、本を検索したりしたときにどういう役目をしているかが知りたいです。 よろしくお願いします。

  • ASCII文字のエンティティネームが知りたい

    HTML実体参照文字について。いわゆる半角英数文字であるASCIIコードでの - (ハイフン/マイナス) と ~ (チルダ) の実体参照記述式の時の表記名:エンティティネームが知りたいです。"&" の様な数値参照記述式では無く "&" の様に書く「実体参照記述式」について知りたいです。 自分であらたか調べましたが、この2つだけがどうしても分かりません。最初から未定義なのかとも思いましたが、半角空白を除く &#33~255; までの全てのASCIIコードに漏れ無くエンティティネームが割り振られており、通常文字列内にも頻出の + * = ? ~等と言った記号類には全て数値参照以外にも実体参照のための名前(エンティティネーム)が設定されており、実際にブラウザ上での表示も完全に同じ様になります。 >参考リンク - http://www.theasciicode.com.ar/ W3Cの公式ドキュメントも読みましたが、全ての文字を網羅しておらず、かなり抜けがありました。 >参考リンク - https://www.w3.org/TR/html5/syntax.html#named-character-references また海外の記事や技術系質問サイト(stackoverflow.com)でも良く分からない、或いは間違った回答を教えており参考になりませんでした("‐" とか "‐" とかの回答ばかり)。 HTML実体参照はWC3によって制定され、各種ブラウザ開発メーカ等に公開情報として発信されてるはずだと思うのですが、何処を探しても &#00~65999; までを完全網羅した一覧表が見当たりません。無いはずは無いと思うんですが…まさかメーカ各位で勝手にエンティティネームを割り振る訳では無いはずなので、必ずやこの世界の何処かには完全版一覧表が存在するはずなのですが、もしかしてこれは国家機密に属するモノなのでしょうか? P.S. >10進16進文字コード変換 - http://code.cside.com/3rdpage/jp/unicode/converter.html ---- 表示例 ---- ・ - : &???; - - ・ ‐ : ‐ ‐ ‐ ・ - : − − − ・ ~ : &???; ~ ~ ・ ˜ : ˜ ˜ ˜ ・ ∼ : ∼ ∼ ∼ ほぼ例外無く全てのサイトで「 ~ : ˜ ~ 」と解説記述されていますが、これは間違っており大嘘です。 実際に適当なHTMLを自作して ˜ と ~ で文字を表示させ、それぞれを上記変換サイトで確認すると、~ の時は正しく半角英数文字の ~ が出力されていますが、実体参照表記の ˜ で出力させた時の文字は見た目こそ非常に似通っており同じモノに見えますが、変換サイトや適当なPHPコード等を通して文字番地を確認すると ˜(x02DC)だと言う事が確認出来ます。つまり半角英数文字の ~ では無い別の文字。 またかなり古いログの中に、ASCII半角空白の実体参照表記が &sp; だと記述されたものを見ましたが。実際にHTML上で再現したところ実体参照として認識しませんでした。気になります。

  • ASP.NET MVC Modelの検証

    Modelの検証について教えてください。 エンティティが下記の三種類あります。 ・AModel(POSTデータ格納) ・BModel(POSTされたAModelの情報等を基に作成する一時エンティティ) ・CModel(DBのテーブルと対応する、保存対象エンティティ) とあるPOSTデータをDBに保存するアクションで、処理の流れは下記のとおりです。 1.POSTデータの検証(アクションの引数でAModelとして取得) 2.POSTデータをもとに、一時エンティティ(BModel)を作成 3.一時エンティティの検証(検証ルールはModel内に記述)←☆ 4.一時エンティティを基に、保存用エンティティ(CModel)を作成 5.保存用エンティティを検証 6.DBに保存用エンティティをSave 方法がわからないのが3での検証方法です。 1の検証については、アクション処理が行われる前にModelStateに検証結果が格納されます。 5の検証については、DbContextのGetValidationResultで検証結果が取得されます。 3の検証はどのようにすべきでしょうか? 5と同様にすることも考えられますが、DBと直接関連付けられるエンティティでもないため、 DbContextを使用するのに違和感を感じてしまいます。

  • SAstrutsについて

    SAStrutsの勉強をしています。 公式サイトから一通りのサンプルを試して動かして見ました。 とりあえず動きましが以下のことで悩んでおります。 ルートパッケージ配下にはaction,dto,entity,form,service,utilがサンプルにあります。 そこで独自にパッケージ(logic)を作成しました。 サンプルではaction⇔service間でDBのやり取りをしていたのを 今回action⇔logic⇔serviceというようにやってみたのですがエラーがでます。 actionで @Resource protected EmployeeService employeeService; をという変数を @Resource protected EmployeeLogic employeeLogic; に変更したら「自動設定」に失敗というメッセージが表示されます。 どうすればactionからLogicを呼び出せるのでしょうか。 よろしくお願いいたします。

  • asp.net MVC

    asp.net MVC環境でもENTITY FRAMEWORK POCOについて質問です。 エンティティ・クラス(POCO)はデータベースのテーブルからしか定義(リンク)できない のでしょうか。 たとえばDBのビューをエンティティ・クラスとして定義はできないのでしょうか。 あるテーブルのあるフィールドをグループ化しSUMしたビューをエンティティ・クラスとして 定義したかったのです。 仮にできないとすると、LINQ to SQL などで加工(グループ化)するしかないのでしょうか。 もし、それしかできないとすると扱いずらさと、効率の悪さを感じます。 自分が分かっておらず方法があれば良いと思い、質問させていただきました。 ご教授よろしくお願いします。

  • EF(コードファースト)のコンテキストクラスの定義

    http://www.atmarkit.co.jp/fdotnet/ef4basic/ef4codefirst01/ef4codefirst01_02.html こちらを参考にしてASP.net MVC + Entity Framework 4.1(コードファースト) のWebシステムを作ろうと考えています。 既存のDBを使用することを考えていて、DBに含まれるテーブル数は100弱となります。 それぞれのテーブルに対応するエンティティクラスを100弱定義し、これらを 登録するコンテキストクラスを作成しようと考えたのですが、 1.コンテキストクラスも100弱定義し、web.configの接続定義も100弱定義する。 2.コンテキストクラスは1つ定義し、その中に100弱のエンティティの定義をする。   web.configの接続定義は1つ定義する 上記の1、2のいずれが方向性として正しいものでしょうか? 2のほうがすっきりするとは思いますが、データ取得時にコンテキスト・クラスのインスタンスを 生成する際、余計なエンティティ定義も読み込まれるためパフォーマンスが悪いような気もします。 無視していいほど軽いのであれば、間違いなく2の方法を取るのですが…。

  • ArrayListからHashMapの変換

    質問1) ArrayListからHashMapの変換(処理要件は満たすが、より良い方法がないか) 質問2) より良い設計はどうするべきか ※ 長文です。すいません。 == 前提条件:  工程) 保守フェーズ  環境) 3階層のWebシステム(クライアント/AP/DB)、AP実行環境はJava(1.4)、DBはOracle(10g) 処理の目的:  DBに存在するレコードの一覧を画面に表示する。  ただし存在しないレコードはnull(空)表示する。 以下テーブルが存在します。 ----------テーブルイメージ---------------- 内部キー(ID)  表示順序   画面表示名 (以降のカラム省略) ---------------------------------------- 1         1        AAAAAA 2         3        CCCCCC 3         5        DDDDDDD ---------------------------------------- 画面表示は以下です。表示枠は5つ。その他の項目も存在する。 ------------画面表示イメージ-------------- 1: AAAAAA 2: (空) 3: CCCCCC 4: (空) 5: DDDDDDD ----------------------------------------- 現状: DB参照は内製のORマッパを使用します。その内のひとつ、メソッドAは 上記テーブルを対象に3つのDTO(Data Transfer Object)を保持したArrayListを返却します。(orderは内部キー) 一方、画面表示ではkey=Valueでの取扱いが有利なため、HashMapで組んでいます。 このため、新たに構築したHashMapにArrayListの内容を順次展開しながら、Mapに 詰めなおすロジックが必要となっています。 (擬似コード)------ List list = ORマッパ.メソッドA(); Map map = new HashMap(); int order = 0; int listIndex = 0; DTO dto = null; for (int i = 0; i < DISPLAY_MAX_COUNT; i++) {   dto = (DTO)list.get(listIndex);   order = dto.get表示順序();   if (i == order) {     map.put((String)i, dto);      listIndex++;    } else {     map.put((String)i, null);   } } (擬似コード)------ 以上を踏まえ、質問いたします。 質問1) ロジックに対するInput/Outputを変更しない前提で、 ArrayListからHashMapの変換でよりよい方法はないか。 質問2) 仮に設計や製造を一からやりなおすことができるとしたら、 より良い設計はどうするべきか。 長文申し訳ないです。最後まで目を通していただきありがとうございます。

  • データベースの形式について

    データベースの形式にはツリー形式と表形式のものがあるということを聞いたことがあります。 表形式はリレーショナルデータベースのことで現在の主流のデータベースの形式ということがわかるのですが・・・。 (1)ツリー形式のデーターベースとはどのようなものなのでしょうか、いわゆる昔あったカード型のデータベースといわれているもののことなのでしょうか?データベース=表形式と思っていましたのでイメージが湧きません、いったいどのようなものなのでしょうか?。 (2)上記のツリー形式のDBと表形式のDBには互換性があるのでしょうか?、たとえばツリー形式のDBを表形式のDBに置き換えることは簡単にできるのでしょうか、困難(不可能)なことなのでしょうか? なにかアドバイスなどいただけないでしょうか

  • Access2002のファイル形式

    デフォルトでDBを作成すると、2000形式になっていますがこれはなぜですか? 一般的に2000形式と2002形式のどちらを使うのがスマートなのでしょうか?

  • cloneNodeするとサイズが増える

    データベースからXML文書のテンプレートを取得し、それを編集して出力するプログラムを作っています。 性能要件のため、「一度取得したXMLはメモリにキャッシュしておき、2回目以降はキャッシュされたXMLを再利用する」仕組みにしています。 public class Entity{ private Element XML; public Element getXML(){ return XML.cloneNode(); } public void setXML(Element XML){ this.XML = XML.cloneNode(); } } public class Dao{ public Element getXML(){ //DBにアクセスしてXML文書を取得する処理   return XML; } } public class Main(){ private Dao dao; public void outputXML(Entity entity){ Element XML = entity.getXML; if (entity == null){ XML = dao.getXML entity.setXML(XML) }   //以下XMLを編集して出力する処理 } } get時とset時にcloneNodeすることで、保存されたテンプレートは書き換えられない……という事を期待し、実際その処理はうまく行っていたのですが 動作させているうちにメモリリークが発生し、調査してみるとどうやらcloneNodeが実行されるたびに、EntityのフィールドのElementオブジェクトの容量が増加している様子… 一体なぜこのような現象が起きているのでしょうか? また、これを回避する方法はあるでしょうか。 javaのバージョンは1.6 データベースはOracle Databaseを使用しています よろしくおねがいします。

    • ベストアンサー
    • Java

専門家に質問してみよう