初心者にありがちなOO設計間違いとか


DB変更の話の前にちょっと思った事雑記(・∀・)


今時オブジェクト指向に縁が無い開発もないわけですが。
JavaC#といったエンタープライズ開発言語をはじめ、RubyPythonといったスクリプト言語とか。*1


もちろん、だからといって誰もがオブジェクト指向に沿った設計が出来ているかというと、それは別な話なわけで(´Д`)
OOな言語を使ったからといって、それだけでオブジェクト指向になるわけでは無いですしね。*2
むしろ世の中全体を見れば、オブジェクト指向なんて意識せずにOO言語を使っているだけの人の方が多いんじゃないかと思ったりして(´ω`)


まあ、個々人のOO能力が高くなくても一定品質のソフトウエアが開発できるようにフレームワークなんかがあったりするわけですし(´ω`) *3


で、OOな設計に慣れていない人達がOOな設計をやろうとすると、非OOな時より酷いものを作ることがたまにあったりして(´Д`)


これはあれですね、習熟度が無いのにドメインモデリングをやろうとして、不適切な責務や結合度を持ったクラスが量産されるという話で。*4


OOな設計=ドメインモデリングという考えから入るのは、最初からいきなり難しいことをやろうとしている訳で、考え方としてどうかと思うんですが(´ω`)


むしろあまり難しく考えずに、

  • 責務の分離
  • 結合度の最小化
  • そのスコープとしてのオブジェクト

っという考えて設計していけば、そんなにおかしな事にはならないと思うんですけどね。


それが実は非OOな設計であっても、最初はそれでで良いんじゃないかと。
そこから始めてパターンやリファクタリングを覚えていって、その結果としてより生産性が高くなっていけば。


そもそもなぜOOするかと言えば生産性を上げるためであって、あんまり本末転倒な事をやるもんじゃないよ、っという話なのデス(´ω`) *5

*1:省リソースな組込の世界はCが主流でしょうけど、高機能・複雑なデバイス開発のところだと、下手なビジネスシステムなんかよりよっぽどしっかりしたモデルでC++してますし(・∀・)

*2:例えばJavaCOBOLなコードって結構あるようですし、Javaは21世紀のCOBOLだみたいな事を言う人もいますけどね(´Д`)

*3:OO設計が出来る人達の生産性を最大化するためのフレームワークもありますけどね(・∀・)

*4:BLOBとか依存しまくったクラスとか(´Д`;)

*5:またレベルの低い話だ…orz