http://martinfowler.com/bliki/PresentationDomainSeparation.html

最も有用な設計原則に、 プログラム(ユーザーインターフェイス)のプレゼンテーション層とその他の機能をうまく分ける、というのがあります。 私はこれを発見して以来、ずっと慣行しています。 長い間これを使ってきて、いくつものメリットを発見しました。

  • プレゼンテーションロジックとドメインロジックが分かれていると、理解しやすい
  • 同じ基本プログラムを、重複コードなしに、複数のプレゼンテーションに対応させることができる
  • ユーザーインターフェイスはテストがしにくいため、それを分離することにより、テスト可能なロジック部分に集中できる
  • スクリプト用のAPIやサービスとして外部化するためのAPIを楽に追加できる(選択可能なプレゼンテーション部分で見かける)
  • プレゼンテーション部分のコードは、ドメイン部分のコードと違ったスキルと知識が必要

これら多くのメリットがあるにも関わらず、この原則が破られているのをよく目にします。知識が無いという理由もあるでしょう。フレームワークが、ドメインとプレゼンテーションを安易にごちゃまぜにしてしまい、分割が困難になっているという理由もあるでしょう。

これは、クラサバ型という意味ではありませんのでご注意を。すべてのコードが同じマシンで動いているとしても、論理的には分割したほうがよいのです。

この原則は、モデル・ビュー・コントローラー(MVC)の最も有名な個所です。確かに、多くのひとにとってMVCとは、この分断をどのように行うかというものとなっています。

人間ではなく、コンピュータ相手の Web Services だって、プレゼンテーション部分です。ですから、ドメイン部分のコードと Web Services 部分のコードをごちゃまぜにしてはいけないのです。外部APIにしてもそうです。

(このことについてIEEE Software column (PDF)でも書きました。)