DTO(Data Transfer Object)の定義と使用

DTO(Data Transfer Object)は、プロセス間でデータを送受信するオブジェクトです。この手法を使用することで、機密情報が公開されることなく、2つのシステム(APIとサーバーなど)の間の通信が可能になります。

DTOは、プログラミングの知識がある人は皆知っているソリューションです。開発者であれば、DTOが何であり、どのような役割を果たすかをおそらくご存知でしょう。しかしながら、一般的なユーザーがDTOを理解するのはかなり難しいかもしれません。

できる限りわかりやすい言葉でDTOを説明するように心がけますが、その役割を強調するために少し技術的な説明になってしまう部分もあるかもしれません。

DTOとは?

前述のとおり、DTOはData Transfer Objectの略称で、名前が示すように、データを転送するためのオブジェクトです。

DTOは、Python、C++、Javaなどのオブジェクト指向プログラミング(OOP)言語環境で使用され、簡単に開発し、更新できます。

OOP環境では、「call(呼び出し)」のシステムが利用され、それぞれがデータルックアップに少し似ていて、時間と処理速度の両方が必要とされます。注意しないと、隠しておきたい次のような機密データがcallによって公開されてしまう可能性もあります。

  • 従業員の住所
  • 口座番号
  • 社会保障番号
  • ビジネスログイン

あるプログラマーが説明しているように、会社に入る際に従業員の名前と写真が必要になる場合があります。名前と顔が一致することを確認するためにこれらのデータを提供する必要がありますが、データベースに保存されている、その従業員に関する他の情報を提供する必要はありません。DTOは、必要な情報だけを転送できます。

dto Sketch image

DTOの利用

DTOには、ビジネスロジックではなく、データのみを記述します。DTOは、シンプルで1つの簡単なタスクのみを実行するものであるべきです。

優れたDTOの条件は、以下のとおりです。

  • ボイラープレート(定型コード)を最小限にする。それぞれのDTOを新規で記述します。
  • 簡単に作成する。DTOは、苦労して記述するような複雑なものであってはなりません(このようなコードは簡単に解読されてしまいます)。
  • 読みやすくする。誰でも解析できるコードを記述します。

APIについてはこの記事で少し説明しましたが、APIが何の頭字語でどのような場合に利用されるのかについては、こちらのブログ記事をご覧ください。

参考文献

Data Transfer Object Pattern in Java: Implementation and Mapping(Stack Abuse)

Rethinking the Java DTO(2020年1月、Scott Logic)

Logistipedia