2014年08月26日

DTO と POCO と Entity の違い

DTO,POCO,Entity


DTOやPOCOやEntityは何が違うのか。何度も話題となる古い問題
「どれも同じようなもん」という人もいれば「全然役割が違うんだよ」という人もいる。
解説している人や本によっても内容が異なるので正解はよくわからないのだけれど、こんな感じでしょうか。

DTO

Data Transfer Object
通常アプリケーションはUI層・ビジネスロジック層・データアクセス層のように、その責務によりいくつかの層に分けられる。これらの層間のデータのやり取りに使うための入れ物が起源。
最も何も機能を持たない。ほぼアクセッサのみで成る。

public SampleDto
{
    public int ID { get;set;}
    public string Name{get;set;}
    public string Address{get;set;}
}


POCO

Plain Old CLR Object の略記とも言われる。
ファウラー御大が2000年に言い始めたPOJO(Plain Old Java Object)の.NET版。
こういった入れ物を特定のフレームワーク上で定義する場合は特定のクラスなどを継承する場合が多く、その親となるクラスにはデータ永続化など何らかの機能が実装されてたりする。このような特定のアーキテクチャに依存しないという意味でPlainなもの。
上記DTOに近いが、永続化ではない若干の処理、例えばDataBind用のプロパティに対する属性だとか、自フィールド値に対する検証処理などが付く場合が多い。

public SamplePoco
{
    [Required]
    public int ID { get;set;}
    [MaxLength(30)]
    public string Name{get;set;}
    [NonRequired]
    public string Address{get;set;}

    public bool Validate(){ return ID > 0;}
}

Entity

データベースのテーブルにあるカラムに相当する型というイメージ。
O/R Mapperで行データをマップする先のオブジェクトの型。
入れ物系定義でデータベースに近いところ。
posted by RR at 22:06 | Comment(0) | Tips | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。