古い概念のアナロジーで新しい概念を理解しようとしてはいけない例
「COBOLとRuby on Railsのアプリケーション構造は似ている」のか?
少し前ですが、以下のような記事がありました。
吉岡氏は「COBOLとRuby on Railsのアプリケーション構造は似ている」と言う。COBOLのシステムは業務ロジックと画面定義体,DBアクセス・ルーチンが分離されており,SEは業務ロジックに専念できた。Ruby on Railsでも画面はビューとして,DBアクセスはモデルとして分離されており,COBOL技術者にとって取り組みやすいと吉岡氏は語る。
最初何のことを言っているのか理解できなかったのですが、
次の図を見て合点がいきました。
ActiveRecordとTransactionScript
通常我々は、業務処理はModelに記述します。
Railsでも、Controllerは薄く、Modelを厚くするように心がけます。
で、ドメインモデルに永続化の機能もある、というのがActive Recordパターンですよね。
しかし、この図を見ると業務処理はControllerに書かれています。
Modelはデータの入れ物(COBOLで言うDATA DIVISION)兼永続化機構で、
Controllerは処理を書くところ(同じくPROCEDURE DIVISION)ということのようです。
これは、どう考えてもTransaction Scriptです。
安易な「似ている」に注意
任意の2つのものを比べるとき、なんかしら似てる点はあります。
僕とキムタクだって似てます。だって2人とも目が2つあるし鼻の穴は3つじゃない。
だから、「AとBは似てる」とか「AとBは同じ事を言っている」とかいう議論を見たら、
どういう点が違うのかを、ちょっと立ち止まって考えてみるべきです。
違う点があるから、AはAでありBではない訳ですから、
単純に「AとBは同じようなもん」と考えることは、
Aを(Bではなく)Aたらしめている何か、Bを(Aではなく)Bたらしめている何かを
見落としてしまうおそれがあります。
COBOLerの人が本当に新しいテクノロジでやっていくつもりならば、
COBOLの知識は、いったん捨てたほうが良いと思います。
後生大事にとっておくようなものでもありませんし。
関係モデルの一番理解が難しい部分がなぜ難しいかといえば、
私たちが既にファイルシステムについて知っていることを、
一度頭から追い出す(unlearn)必要があるからだ。
ジョーセルコ