Webアプリケーション開発におけるアーキテクチャ入門

Webアプリ開発初心者として開発におけるアーキテクチャに関することをいくつかまとめておこうと思う。

アーキテクチャとは要は「設計」のことなのだが、念のためwikipediaで調べるとこういう感じ。

コンピュータ(主にハードウェア)における基本設計や設計思想などの基本設計概念を意味する。「実装」が細かい回路の設計を指すのに対して、おおざっぱな見取り図レベルの話。


今回はWebアプリケーション開発におけるアーキテクチャについてなんですが、アーキテクチャのパターン(設計方法)もいくつかあります。
代表的なパターンは「レイヤ」「DTO(Data Transfer Objectの略)」「MVC(Model・View・Controllerの略)」「トランザクションスクリプト」「DAO(Data Access Objectの略)」などなど。

レイヤ

レイヤはプログラムなどをその役割ごとにまとめて、保守性や変更時の容易性を高めるための仕組み。
PCで簡単にいえばキーボード・マウスで入力を行い、PC本体で処理を行い、ディスプレイ・ステレオで出力をするといった感じ。
それぞれ入力・処理・出力というレイヤに分かれている。


それぞれのレイヤは個々で取り替えることができ、取り替えたことによる他のレイヤへの影響がない。(マウスを違うメーカーのものと取り替えても影響がないように)
またそれを実現するために、レイヤとレイヤの間には必ず決まったインターフェイスが必要となる。(マウスならUSBで接続といった感じ)


レイヤには注意すべき点もある。それは層をまたいだアクセスはできないということ。
当たり前だが、マウスから直接ディスプレイへのアクセスはできなくて、一度処理を行ったものしか表示しないということだ。


Webアプリにおけるレイヤは大きく3つに分けることができる。

  1. ブラウザへの出力やUIを提供する「プレゼンテーション層」
  2. ビジネスロジック(アプリとしての機能を遂行する際の本質的なロジック)を処理するための「ビジネス層」
  3. DBやXMLなどやり取りをする「データアクセス層」

DTO(Data Transfer Object)

DTOはデータをネットワーク間でやり取りする際に、まとまった単位でやり取りするという考え方。
これのよいところは、データのやり取りをまとめて行うので何度もネットワーク間を行ったり来たりすることがないということだ。
DBを使った一連のWebアプリでは複数のテーブルを用いることが通常だが、テーブルごとにアクセスしていたのでは処理が多くなる。
つまり、全部まとめて一回で終わらしてしまおうという考え方。(多くの場合、付加は軽減されるはず)
http://architect360.apricot-jp.com/300/dtodata_transfer_object.html

MVC(Model・View・Controller)

MVCはそれぞれ「Model・View・Controller」のイニシャルをとったもの。

  • Modelは、ビジネス層とデータアクセス層のプログラム全体のことを表す。
  • Viewは、画面への表示を行う部分(HTMLなどを書き出す)。
  • Controllerは、ユーザーからのアクションを受け付けて適切なビジネスロジックを呼び出す。そして、次に表示するViewの選択も行う。


MVCもレイヤの考え方と同じように保守性・変更の容易性を実現できる。
レイヤのプレゼンテーション層をより細かく分けているイメージ。

トランザクションスクリプト

トランザクションスクリプトはビジネス層におけるアーキテクチャのパターン。一連の処理(トランザクション)を単純な処理の羅列によって実装する方法。
「ドメインモデル」のオブジェクト指向プログラミングとは違い、一連の処理が1つのメソッドの中で完結する。

DAO(Data Access Object)

DAOは、データアクセス層におけるアーキテクチャパターン。
DAOはデータベースとのやり取りのみを集中させて、ビジネスロジックからは分離するという考え方。