初めに
本格的にプログラミングを始めて約5ヶ月経過しましたが、今まで「MVC」について触れたり聞いたりすることはあっても「ADR」については耳にしたことすらありませんでした。
しかし、触れる機会に恵まれたので今回は「ADR」について学んだことを記していこうと思います!
まずはざっくり
「ADR」とはAction-Domain-Responderの頭文字をとったもので、ソフトウェアアーキテクチャパターンのひとつです。「MVC」の問題点を解決するためにPaul M. Jonesさんによって作られました。
「MVC」の問題点というのは主に二つあり、
1, Fat Controllerに
開発が大規模になればなるほどControllerに書く処理の数が増えて肥大化してしまう
2, 責務の分散が不明瞭に
プレゼンテーションロジックを記述する際にControllerに書けば肥大化に繋がり、Modelに書けば処理責任がブレてしまい、Viewに書けばフロントエンドの可読性が落ちてしまう
これらの問題を解決してくれるのが「ADR」です。
Actionについて
Actionは「MVC」でいうところのControllerで、DomainとResponderを中継する役割を持ちます。
Controllerと違うのは、ひとつのActionファイルにひとつのメソッドを記述する点です。これによりファイルの数は増えますが、大規模な開発でもActionがControllerのように肥大化することはありません。
また実際に使ってみて、ファイル検索ができるのが非常に便利だと感じました!
Domainについて
Domainは「MVC」でいうModelで、ビジネスロジックの記述やデータの加工を行います。この二つはほとんど同じでよく宗教論争になったりします。私自身も特に違いを感じませんでした...。
Responderについて
Responderは「MVC」だとModelとViewの中間に位置し、Actionから受け取ったデータをもとに最終的なレスポンス(HTML、JSON、XMLなど)を生成します。なのでここでデータベースに接続するような処理を書いてはいけません。
個人的にはResponderクラスを作るのは少し面倒くさいですが、責務が明瞭になる点は魅力に感じます!
最後に
この記事は大まかな内容になってしまいましたが、Webアプリケーション開発で『ADR』を採用する人が増えることを願っています!