RDBとオブジェクト指向

なんか漠然とした話ばかりつづけてしまった。
ここらで整理しなおそう。
動機は、業務Webアプリを作ったときに、全体的に手法に無駄が感じられたこと。
使ったモデルは、RDBとオブジェクト指向
痒いところに手が届かない感じだった。
具体的に、あれができない、これが不便だと一つずつあげていくことはできる。
それもあとでしてみようと思う。だが、それを全部足しても、たぶん感じたもやもやはうまく説明できない。
今日は直感的になにを感じたか、を書いてみたい。
(メタマス!で直感も大切とか書いてあったのに影響されているかなぁ。)

すべての十分に複雑なCもしくはFortranプログラムは、後付けの、不完全な仕様とバグを持ち、遅い、Common Lispの半分の実装を含んでいる。- Philip Greenspun's Tenth Rule of Programming

べつに、CはださくてLispはすごいとかいう話をしたいわけではない。
低レベルな言語で複雑なことをプログラミングしようとして頑張ったら、
より高いレベルのモデルを実装してしまっていた、という話だ。
ありうる話だと思う。
で、最初に言っておくと別に言語を作ろうと思っているわけじゃない。
ただ、RDBでもオブジェクト指向でもない、業務Webアプリを作るのにもっと適したモデルが欲しい、と思った。
感覚としては、そのモデルXははっきりとはわからないけど、明らかに実在していそうな気がして、
Webアプリを毎度毎度つくるたび、Pythonオブジェクト指向やRDBを使って、
毎度毎度、そのモデルXの不完全で部分的な実装を繰り返し作っていると感じた。
つまり、RDBやオブジェクト指向の上に、ちょっとした気の利いたフレームワークやO/Rマッパーを乗せるだけじゃ、
根本的な解決にならなくて、もう全然違うモデルを実装してしまった方がはやいのではないかと思った。

そのモデルを探してみようと思った。メタマスにも書いてあったけど、こういうとき発見と創造の境目はあんまり意味が無い。
ということで探索を開始した。
オブジェクト指向を、メタクラスとかつかってひねくり回してみたり、
アスペクト指向についてしらべてみたりしたがぴんとくるものはなかった。
RDBの理論とか、そのもとになった論理学とか集合とかも調べてみた。
とかいろいろやってたどり着いたのは圏論。もう本当に直感だけで根拠はないけど、圏論になにかヒントがあるような気がしてる。
ということで、最近ちょっとメタマスを読んでばかりで圏論の勉強してなかったけど、また明日から頑張ろう。

で、ちょっと別のほうからみてみる。このモデルXは、具体的なアプリの仕様そのものは含まない。
逆に言うと、具体的な仕様だけをのせれば動き出すような、モデルが欲しい。
てことは、すでにある具体的なアプリの全部のコードから、具体的な仕様の部分を引いて、
残った部分にすこしだけなにかを足せば、モデルXになるはずだ。
で、「アプリの全部のコード」っていうのには、オブジェクト指向のモデルとRDBのモデルも入る。
ということで、オブジェクト指向とかRDBとかMVCはいったん忘れて、
いったいそのWebアプリでお客さんは、なにができればよかったのか、
(RDBやオブジェクト指向でどうそれを実現するかというのには関係なく)お客さんとしては、どのように動くモデルが欲しかったのか、それを考えて、圏論で分析してみたいと思う。
つまり、どのように「仕様」を書けばいいかが決まれば、モデルが決まるのと同じなので、
そっちからも攻めてみたいと思う。