私が提示するような話でもないほど同じような話はネット上に腐るほど存在しているだろう。関わらず不思議とシステム開発の現場レベルで見てみると、昔と変わらない手法をずっと続けていたり、また優秀なアーキテクトに恵まれていない現場などはひどく絡みあったコードと格闘していることは多い。近代的なデザインパターン・アーキテクチャとは何かということについて自分なりに詰めてみようと思う。ドメイン駆動設計(DDD)への招待である。同じような疑問を感じている人の何かヒントになればと思う。人々はオブジェクト指向を手にした昨今のソフトウェア製作の設計パターンは変化しているのだろうか、ということをまず考えてみよう。「コンピュータの登場から今まで」のような大きなくくりで見た時には、ソフトウェアの設計パターンは大きく変化していると断言していいだろう。(といってもそんな昔に私は生まれていないが)時代ごとに変化する大きな要因の一つに、偉大な先人たちが開発してきたコンピュータ言語がある。昔はアセンブラ・C言語などの、手続き型言語が大部分を占めていた時代があるが、この頃開発においてドメインに着目するというよりかは手続きそれ自体に着目している。これは言語のパラダイム的にやむを得ない部分が大きいが、いずれにしてもプログラミングされたその内容はそれぞれが意味をあまり持たない。個別には意味がわからない処理の連続が、結果として業務ロジックとして存在している。その後時代は流れてついに人類はオブジェクト指向言語を手にする。このオブジェクト指向というのはプログラミングパラダイムの革命の一つと言っていいだろう。オブジェクト指向によってドメインモデルと実装がかなり親和性を持って結合できるようになったのである。コンピュータ資源も豊富になってきた今、高級言語を使っていればあまりメモリなどの資源を期にすることもない。実装都合でねじ曲げてきた手続き型への束縛からも開放されつつある。これが爆発的となり、様々なツールなどが世にでる。sbtなどのマルチプロジェクトを取り替えるような機構ができたりして、その実装性能よりも、実装とドメインモデルをどれだけ近づけて、人間の脳に理解しやすいようにプログラミングを行う時代になっている。呼ばれる仕組みを利用してシステムを実装していた。これは先程の話で言うとオブジェクト指向の誕生前で、割りかし手続き型の側面が強かった。これがオブジェクト指向の出現によってMVCというデザインパターンの実装が用意になり、それをサポートする多くのフレームワークが誕生した。多くの(初級)開発者たちはとりあえずMVCすればそれなりに構造化された実装を手にすることができた。MVCの功として、まず多くの初級開発者たちにとって開発の目印になってくれたことである。それまでとくらべてエンジニアたちの一種のヒントのようなトピックを投下して議論の対象となった。実際そのデザインパターンはシステムがあまり大きくないうちは非常に効率的に開発できる(ように見える)ためそれほど規模の大きくないシステムにとっては問題がそれほど露呈しない場合も多い。MVCは銀の弾丸ではない実際MVCのすべてが否定されるべきものではない、一種のアンチパターンとして利口なUIパターンなどというものがあるがそういった多くの場合はとらないでおくべき選択肢を序盤に排除してくれるような働きをしている。単純にMVCという一言で対応するにはシステム開発はそれほどシンプルではなかったという話である。責務が大きすぎるのである。そのため人によって解釈が異なったり、またそもそもそこの設計を怠ったりということで大きなシステムに対応できなくなっているパターンをよく目にするように思う。内部にDBレイヤへのアクセス処理などが記述されていて、どんどんモデルが膨らんでいくなどのようなことである。拡張するようなよりドメインとマッチした設計思想が必要なのである。昔からあったのかもしれないが、最近特に多く目にするようになってきた。ドメイン駆動設計の略称であるが、これはドメイン(業務ロジック)に特に着目して、それをいかに齟齬なく実装に落としこむかということに着目した設計手法である。実際かなり具体的な設計思想を(先人たちの経験の蓄積として)もっており、これらを盛り込むことでシステムが大きくなってきた際にも拡張性がある実装を担保できる。(他にもいろいろあるが)いうようなより詳細なドメインモデルに落としこむ。これによりMVCで取り扱っていたものを、より適切な責務へと分割することができる、、、などなどその内容については長くなるのでまたの機会に割愛するが、DDDのバイブルである下記の書籍に目を通すと良いと思う。一度目を通しておいて損はないです。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。汎用性のない実装はするなよもやま話ソフトウェア設計DDDMVC設計scalikejdbcでmysqlとの通信時のCommunicationsExceptionに対処するSeleniumのStaleElementReferenceExceptionに対応するRECOMMENDこちらの記事も人気です。