DAO/DTOデザインパターン
DAO/DTOデザインパターンとは
DAO(Data Access Object)とは
DAO(Data Access Object)とは、データベースなどのデータストレージへのアクセスを抽象化するための仕組みです。
簡単にいえば、データベースへのアクセスを行う専用のクラスを作り、そのクラスを通してデータベースへアクセスする設計手法です。

DAOのメリット
DAOを用いることで、データアクセスの複雑さを隠蔽することができます。
これにより、アプリケーションのビジネスロジックは、データベースの詳細な手続を意識せずに、データの取得や保存などの操作を簡単に扱うことができます。
DAOは共通処理をまとめたクラスであり、複数Controllerクラスから使い回すことができます。
このことは、コードの再利用性、保守性、テストの容易性を向上させるメリットがあります。
また、DAOオブジェクトを差し替えるだけでデータベースの切り替えを容易に実現できる点もDAOの大きなメリットです。

DTOデザインパターンとは
DTO(Data Transfer Object)とは
DTO(Data Transfer Object)とは、データ転送オブジェクトと訳する通り、データ転送を行うためのオブジェクトです。
DTOはデータの受け渡し専用クラスであり、データを格納するメンバ変数(フィールド変数)群とそれらへのアクセサメソッド(Getter/Setter)のみで構成されます。
これは、ビジネスロジックを保持しないクラスということを意味します。
以下にC#で実装されたDTOのサンプルを記述します。
データを格納するメンバ変数とコンストラクタのみを定義します。
class FontDTO
{
public string FontFamily { get; set; }
public float FontSize { get; set; }
public FontStyle FontStyle { get; set; }
public FontDTO(string fontFamily, float fontSize, FontStyle fontStyle)
{
this.FontFamily = fontFamily;
this.FontSize = fontSize;
this.FontStyle = fontStyle;
}
}
データ転送とは
DTOにおける「データ転送」とは、プログラム間のデータ転送、および異なる層間(プレゼンテーション層、ビジネス層、データアクセス層)のデータ交換を意味します。
例えばフロントエンドとバックエンドなど、異なるアプリケーション層間でネットワーク越しにデータをやりとりする時などを指します。
DTOは、プログラム間において、効率良く、互いに利用しやすい形式で渡すためのデータ転送を行うための工夫です。
例えば、DTOクラスをシンプルに作成することは、必要な転送データを削減することであり、ネットワークの負荷を軽減できます。
DTOパターンは、特にマイクロサービスやAPI設計において重要な役割を果たします。
DTOのメリット
| 利点 | 説明 |
|---|---|
| データのカプセル化 |
必要なデータのみを含む(カプセル化する)ことで、不要なデータの送受信を防ぎます。 このことは、送信するデータを制御して内部構造を隠すことができるというセキュリティ面の強化につながります。 |
| 効率的なデータ転送 |
異なる層やモジュール間で複数のデータを受け渡しする際に、データを一度に受け渡しできます。 ビジネスロジックの変更や拡張に影響せずにデータの構造や転送方法を変更できます。 |
| データの整合性保持 |
DTOでは、型を指定することで、データの整合性を保つことができます。 データのシリアライズやデシリアライズを行う場合、一貫したデータフォーマットを保持し、層間の依存関係を最小限にします。 |
| コードの可読性の向上 |
DTOはシンプルなデータ保持クラスでありビジネスロジックを持たないため、役割や意図が明確になります。 データ構造が明確に定義されているため、開発者はDTOを参照するだけでデータの内容やフィールドを把握することができます。 |
DAOパターンとDTOパターンを組み合わせて利用する
DAO/DTOのメリット
DAOパターンとDTOパターンを組み合わせると、以下のメリットがあります。
・1つのレコードのデータを一括で管理できるため、データの受け渡しが容易になる。
・アクセス処理の回数を減らしことができ、性能を向上することができる。

関連ページ
- デザインパターン
- デザインパターン-Iterator
- デザインパターン-TemplateMethod
- デザインパターン-ChainOfResponsibility
- デザインパターン-Command
- デザインパターン-Interpreter
- デザインパターン-Mediator
- デザインパターン-Memento
- デザインパターン-Observer
- デザインパターン-State
- デザインパターン-Strategy
- デザインパターン-Visitor