« Bluetoothヘッドホンを買ってみた | トップページ | LEDチカチカまでが結構長かった »

2010年5月 7日 (金曜日)

「オブジェクト指向っぽいことをしなくても良いわけ」を考えてみる

えーと、久しぶりにこのブログのメインテーマ(だったはず)な話題を。

プロフィールにも書いてあるのですが、3年前にこここんな文章を書きなぐっていた時期がありました。ほんとに最後の方は書きなぐりで誤字脱字も酷いし、そろそろ内容を見直し&追記しようかなぁと思っていたところに、竹添さんのツイート経由でこんなエントリを見つけたのでした。

ご覧の様にコメント欄がプチ炎上状態です。まぁコメント内容を読むと炎上して当然かな?と言う内容があったりするのですが、そういった部分には触れず、このエントリを見る以前から思っていた事をこのエントリとコメントからの内容もふまえた上で書いてみようかなと思います。

「自分でクラスを作ってオブジェクト指向っぽいことをしている」なんてことはまったくない。

これは業務アプリケーション実装の末端部分では結構当たり前だったりします。もちろん、自前で再利用性を考えて様々なクラスを作って使っている方も居ますが、大抵はこのエントリでも述べられているように、「.NET Framework」で提供された便利なクラス群を組み合わせて所定の処理(ロジック)を実現するケースが多いと思います。そして、大抵のロジックはこんな作りだったりします。

  1. メソッドの引数あるいは他の仕組みから、処理結果のデータをもらうために必要なデータ(パラメータ)をもらう
  2. 必要ならパラメータを加工(場合によってはパラメータの検証(バリデーション)も行うケースがあるかも)
  3. 結果として必要なデータをデータベースから得るための命令文(SQL)を生成(ここで1〜2で出てきたパラメータも使用)
  4. データベースに接続&SQLを実行してもらって結果をもらう
  5. もらった結果を(必要であれば加工して)画面に表示(あるいは結果によって画面の表示を変えるなど)

このタイプのロジック、私は個人的に「SQL一発」ロジックと呼んでいます。その理由として、上記における3.の「SQL生成」が最重要であると言うところからです。ほとんどの場合、ここを間違えさえしなければそのロジックは正しく動きます。だから必死でこの部分をどう実現するか考えるわけです(場合によってはここでかなりの時間を要します)。当然、4.以降の処理も大事ではありますが、3.で間違いがあるようでは元も子もありません。

それで、4.以降の処理と言うのはもっとも単純なケースでは「結果を画面に表示するだけ」の処理になります。イメージとしては「データの移し替え」で、プログラミングの世界ではいわゆる「代入」です。ここにオブジェクト指向の出番と言うか、メリットはあまりありません。

じゃぁ、どこにメリットがあるのか?冒頭の引用で「オブジェクト指向っぽいことをするなんてことはまったくない」と書いてあるように、そもそも入り込む余地は無いのです(ちょっと大げさに言ってます。実際は入り込む余地は十二分にありますがね)。

言い換えると、上記に記載の1〜5の処理のどこかでそのメリットと競合する部分があり、その部分でカバーされているので「オブジェクト指向っぽいことをする」必要が無いと言う事なのです。それはどこか?はい、それが3.の「SQL生成」処理にあたるのです。件のエントリの著者の方のコメントにも

どのようなSQL文を書くか決まれば、もう内部設計が終わったようなものです。

と言うものがありますね。このスタイルで仕事をこなす事にすっかり慣れ親しんでしまった人にとって、これで十分に目的が達成できている訳ですから「オブジェクト指向プログラミングを自らが行う事によるメリット」と言うのは感じづらいモノになるのは自然だと思っています。

とは言えこの業界、外部から情報を収集していると「やっぱ、オブジェクト指向を自ら取り入れた方がいいのかな?」と思うケースもあるんじゃないかなと思っています(そうあって欲しいなぁ…)。ま、そこはそこでまた別の要因が絡んだりしてすんなりと行かない事が多いようです。

と書いたところで少し長くなったので、続きはまた後日。

|

« Bluetoothヘッドホンを買ってみた | トップページ | LEDチカチカまでが結構長かった »

コメント

> 「やっぱ、オブジェクト指向を自ら取り入れた方がいいのかな?」と思うケースもあるんじゃないかなと思っています(そうあって欲しいなぁ…)。

そういうケースです。
http://www.ailight.jp/blog/kazuk/archive/2006/11/05/13271.aspx

# 「メールアドレス(任意)」と書いてあるのに、「入力必須です」だそうです。

投稿: Jitta | 2010年6月14日 (月曜日) 22時10分

コメントどうもです。
メールアドレスの件、ココログの設定で「必須」としているのにも関わらず画面上の表示が追従していないようです。
このデザインにして5年以上変えてないのでその辺も関係(アップデート内容が反映されていない?)しているかもしれません。

リンク先の内容、ASP.NETの経験は少ないのでぱっと見で完全理解に至っていません。DAO的アプローチとやりたい事は同じと言う事であってますでしょうか?

いずれにせよ、「今使っている手法よりももっと良い手法」を探求する事と、それを実務レベルで問題なく適用できるようにする為の練習の時間を取る事への意識が関わっていると考えています。

続きではその辺りの心理状態について言及してみようかなと思ってます。

投稿: nkgateway | 2010年6月14日 (月曜日) 23時39分

私も、「プログラマーという職業」の端にたどり着いた所なので、理解できていません。「賛成はできるけど、説明できない。こういうケースでは、こうすればいいと、直ぐには出てこない」という感じ。
たぶん、作りっぱなシステムであれば、用意されたクラスのポトペタでも十分だと思います。でも、数年間メンテナンスが続く、何回かに分けて拡張していくような場合は、その「次回」において、前回作ったものがポトペタ出来れば、手間が減るのではないでしょうか。

投稿: Jitta | 2010年6月15日 (火曜日) 07時42分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2790/48298513

この記事へのトラックバック一覧です: 「オブジェクト指向っぽいことをしなくても良いわけ」を考えてみる:

« Bluetoothヘッドホンを買ってみた | トップページ | LEDチカチカまでが結構長かった »