まとめ(Summing Up)

まとめると以下のとおり

  • データが論理的に分散しているか、どうか?分散しているとあまりSQLによる高速化のメリットはない。(というか、下手にジョインを行うとオプティマイザがへんな実行計画を作って、かえって遅くなる場合もある)よって、データアクセス層をつくって、ビジネスロジック部分は分散環境を意識させないシステムを作るべきである。つまり、ドメインモデルを使うほうがよい。ただし、もし、SQL in Logicを使うのであれば、ビューやシノニムを使用して、間接的にSQLを実行することにより意識させなくすることもできる。ただし、この場合高速化のメリットは少ない。
  • ロジックをSQLに入れるならば、移植性は諦めた方がいい。
  • 致命的なパフォーマンス問題が発生したらSQLの改善を考える

あと重要なことをいくつか

  • SQLに詳しいメンバーがいなければ、ドメインモデルを使う。
  • 複雑なSQLを使用する場合は、実行計画のチェックをしっかり行う。自信がなければドメインモデルで
  • ネットワークの回線が細い場合はSQL in Logicがよい。または、ドメインモデルにおけるメモリの展開を太い回線でつながれているアプリケーションサーバー上で行い、最低限のデータをクライアントに流すようにする
  • 複雑なSQLの場合は、テストが課題である。単純なSQLで構成されているドメインモデルはテストが簡単。