ここってオブジェクト指向プログラミングのスレなの?
設計の話ならドメインモデルとか普通に出てきそうなものだけど
出てないよね? 設計の話題は別? まあ無視して話すけどw

最近ようやくオブジェクト指向設計というものが理解できてきた。
そもそもわかりにくいのは世間で言われている用語がごちゃごちゃ。
そこでまとめてみる。内容を伴っているなら、ツッコミは大歓迎。

一般的にオブジェクト指向による設計が〜という設計の話はビジネスロジックの話。
つまり業務システムをモデリングした時の設計をどうするかという話がメインになっている。
ビジネスロジック部分をオブジェクト指向で設計すると、それはドメインモデルとなる。
業務システムを非ドメインモデルで行うと(よく使われるのが)トランザクションスクリプト(手続き型)となる。

だけどシステムを構成する要素はビジネスロジック部分だけじゃない。
フレームワークやライブラリもある。現在では一般的にフレームワークやライブラリは
オブジェクト指向で設計されている。つまり以下のような構成もありうる

オブジェクト指向言語+各種ライブラリ(オブジェクト指向)+フレームワーク(オブジェクト指向)+ビジネスロジック(手続き型)

実は現在の日本ではこの構成で作られていることが非常に多い。オブジェクト指向で
設計していると思っていたとしてもこうなっている場合が多いし、俺も推奨する。
オブジェクト指向だと、最初から完璧なものを作らないと破綻しやすいので作るのも把握するのも時間がかかる。

だけど困ったこと現在のフレームワークは、ビジネスロジックがオブジェクト指向であることを
前提に作られているものが多い。フレームワークがビジネスロジックを(オブジェクト指向で)作る
仕組みを用意している。たとえばRubyOnRailsのActiveRecordとか。
その仕組みに従って使うとビジネスロジックでオブジェクトがでてくることになる。

オブジェクト指向ビジネスロジックを前提としたフレームワークでトランザクションスクリプトを使うのなら、
そのためやり方(考え方、オブジェクトをデータとメソッドに分離した上でフレームワークを利用する方法)が
必要なのだが残念ながらその情報が少ないから、ちょっと混乱が起きている。