スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

これからのWebアプリ

Life is beautiful: Ruby on Railsの「えせMVC」の弊害の記事を読んで、ちょっと思ったことを書いてみる。

Modelの外部インターフェイスの設計においてもっとも大切なことは、この「データの整合性」の責任を100%Model側で引き受け、「Controllerが何をしてもデータの整合性だけは絶対に壊れない」ように作っておくことである。そのためには、上の例の「手持ちの現金の増減を記録したテーブル」へのControllerによる直接のアクセスは絶対禁物である。Controllerが出来る事は「何をいくらで売ったか」を Modelに報告するだけで、その情報に基づいてデータベースに適切な変更を加えるのはModelの役割である。


 (誤解した人が多かったので追記すると)結論としては、「Railsを使って(データの整合性が大切な)アプリケーションを作る場合、素のままの ActiveRecordにControllerから直接アクセスするのは避け、ActiveRecordの上に一枚皮をかぶせる形でビジネスロジックを含んだModelをきちんと設計・実装し、ビジネスロジックがControllerに浸食していくことを意識して避けることが大切である。


 なお、読者からのコメントで学んだのだが、Javaにおいても同じような「えせMVC症候群」は蔓延しているようで、MVCの本質を理解していないエンジニアが、うすっぺらなDAO(Data Access Object)の上にビジネスロジックを含んだ分厚いControllerを書きながらそれをMVCと思い込んでいる、という話は良くあるらしい。


そう。この2個目の追記にあるようにJavaの世界だと一枚皮をかぶせるのは普通。
Strutsでいうと、ViewにJSPがあって、ControllerにActionクラスがあって、ActionクラスからServiceクラスが呼び出されて、そこでごにょごにょビジネスロジックと呼ばれる処理をして、ModelをDao経由で保存する。
っていうのが現状。
以前、層に分けるフレームワークが流行って、それの名残だと思われる。

一番最後の文には引っかかるものがあって、分厚いControllerを作ってるんではなく、
筆者が望んでいるとおり、Controllerにロジックが侵食しないように、
一枚かぶせていると考えれば、「MVCの本質を理解していないエンジニア」とはいえないのでは
ないのだろうか。

といっても、自分的には大きく見たらどっちもMVCに乗っ取ってるし、
ロジックがControllerにあるって言い切るか、Modelにあるって言い切るかの違いぐらいしか
ないのかなと。
もっといえば、そもそもMVCっていう言葉があいまいで、ControllerとModelの責務があいまい(ロジックはどっちが持つかあいまい)っていうのが、ダメだよね。
MVCS(Model, View, Controller, Service)とかだといいのに。
どんなにModelにロジックを持って行こうが、Serviceという概念は必要だと思うので。




で、コメントとかも読んでみたら
PAC(Presentation Abstract Controller)っていうフレームワーク?もあるらしいことをはじめて知りました。
で、調べたけどよくわかんなくて、そしたら、全然関係ないことが頭をよぎったので、
それを書きたくなったのです。

それは何かっていうと、Webアプリの世界にもプラグインとかアドオンの考え方を入れ込んだら
おもしろいんじゃないかなーって。かなり抽象的に頭をよぎった。
FireFoxとかEclipseじゃアドオンは普通だし、すごい便利。
何が便利かと言ったら、ひとつのことをやろうとしても、人それぞれ好みやら、必要なものって変わってくる。ネット見るとかソース書くっていうのをやろうとしても違うアドオン入れるように。

ってことは、Webアプリでもひとつのあるサービスがありました。
でも、好みやら、必要な機能とかっていうのは違ってきますよね。
それをアドオンのような感じでWeb上でも表現できたら楽しいんじゃないかなぁ。
今あるサイトでイメージに近いのはiGoogleのようにカスタマイズできるもの。
しかも、ほかの人が開発してもオッケーって言うやつ。

そのカスタマイズ対象をなんかのサービスにする。
例えば、カレンダーWebアプリで、プラグイン入れたら違う情報も入力可能になるとか、
リマインダー機能ないけど、付けられたりするとか。
ってことは、イメージとして一番近いのはGreasemonkeyになるのかな。


なんか結構簡単に出来ちゃいそうだなぁ。
まぁ、そんな未来を妄想した3連休の終わりでした。
スポンサーサイト

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

PAC (Presentation Abstract Controller)

ブログを読んでいたら、アーキテクチャーパターンとして「MVC」よりも「PAC」が良いという話があった。 PACとは、Presentation Abstract Controllerの略で...

コメントの投稿

非公開コメント

プロフィール

tsuchiwara

Author:tsuchiwara
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
おすすめ商品
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。