.NETで始めるデザインパターン
楽しみにしていた 中西 さん の記事が @IT に載った。
私の偏見かも知れないが、.NET 開発者は、Java の人たちと比較して、オブジェクト指向だのデザインパターンだのに慣れていないような気がする。
だから、今回のような .NET 開発者向けの記事は、これからとても重要だ。
これから .NET 開発者の前には、テスティング フレームワークだとかリファクタリングだとかエンタープライズ パターンだとか DI (DependencyInjection) コンテナだとかアスペクト指向だとか、Java の人たちが取り組んできた様々な技術の可能性が待っている。
そしてこれらは、オブジェクト指向やパターン技術に関する知識を前提としているのだ。
ところで、中西さんは、ドットネッターでアジャイラーで TDD Player (謎) だ。
なので、デザインパターンの有用性を .NET 開発者に教えるのにもなんだかとてもアジャイルな感じだ。
これまでのデザインパターンの解説に、次のような言葉が使ってあるものがあっただろうか。
- 「モチベーション指数」
- 「ホワイト・ボードにクラス図」
- 「NUnit用テスト・コードを記述してみよう」
例題も、HowMuchGreenbarLover メソッドだとか、HowHappy メソッドだとか。
福井 さん も書いてたが、とても中西さんらしい。
※ この記事は、Ichikawa さん のところでも紹介されている。
さて、今回の記事では、次のような問いに答えている。
問い:
「デザインパターン? 何それ? 何が良いの? .NET な我々にメリットあるの?」
でこれに関する有り勝ちな答え:
- 「デザインパターンというのは、こうこうこういうものだ」
- 「例えば、State パターンというのがあって、それはこういうもので・・・」
- 「使い方は、こんな感じ」
- 「VB.NET や C# でサンプル コードを書いてみると、こんな感じだよ」
- 「ねぇ、わかった? 良さそうでしょ。使ってみてよ」
これは、演繹的な説明だが、なんだかウォーターフォールな感じだ。
「うーん、どういうものかはなんとなく判ったけど… まあいいや、また今度改めて勉強するよ」
とか言われてしまいそうだ。
# 私経験有りますから!! 残念!!! 切腹!
で、中西 さん の答えは一味違う。少し真似してみるとこんな感じだろうか。
中西さん風の答え:
- 「例えば、VB.NET や C# でこんなコードがあるとするやん」
- 「ありがちなコードやけど、これってどうなんかなー 自分どう思う?」
- 「こんな風にしてみたらどうかなー」
- 「な? 自分知ってるやろ? ポリモーフィズム。どう、これ」
- 「これが State パターンや。で、今やったのがリファクタリング」
- 「な? 今度から State パターンやらいうたら、こういうのを指すんやで」
※ フィクションです。実在の中西さんとは関係ありません。
「デザインパターン23個覚えたぞ。さあ何かに役立てよう」でなくて、リファクタリングの結果として、使うべきところに使う分だけのデザインパターン。
こういきたいものだ。
さあ、今後の連載にも期待だ。
※ 2005/02/02 第2回が掲載。
ディスカッション
コメント一覧
とても素敵なご紹介、ありがとうございます♪
ドットネッターでアジャイラーで TDD Playerの中西です(爆)
なんでそんなに関西弁がうまいんでしょうか。
それに私なんかよりもっとべたべたの関西弁やし(笑)
>デザインパターン23個覚えたぞ。さあ何かに役立てよう」でなくて、リファクタリングの結果として、使うべきところに使う分だけ
>のデザインパターン。
>こういきたいものだ。
そうそう!!これなんですよね。今回の連載で伝えたい一番のテーマって。
デザインパターンのカタログが先人達のリファクタリングの結果なら、そこに立ち戻ろう。
コード書く前にあらかじめデザインパターンの適用を考慮するような従来のやり方は、
少しだけ見直してもいいんじゃないかと。
せっかくTDDやるんだったら、さっさとグリーンにしちゃってあとはリファクタリング♪
赤いのは嫌よってことで(笑)
モックを使用する場合などは、無意識に Inversion of Control パターンを適用しちゃうでしょうし、
全てがリファクタリング -> パターンでなければ駄目だとも思ってないんですが、
そんな場合でも「使うべきところに使う分だけ」は念頭においておきたいです。
あ、いいですねー、このコンセプト!
私も記事読んでみようっと!
「デザインパターン23個覚えたぞ。さあ何かに役立てよう」
これが盲点というか落とし穴なんですよね~ほんと。
自分もそうでしたが、ついつい覚えたからなんでもかんでもまずは使っちゃおうって考えちゃうんですよ・・中西さんがmixiでも書いておられましたが「リファクタリングしたら結果的にデザインパターンを適用してました」ってのが、まさに目から鱗!
「デザインパターンのカタログが先人達のリファクタリングの結果なら、そこに立ち戻ろう。」
こういう考え方って今までの自分にはなかったなぁ~なるほどなるほど。
中西 さん、chikura さん、 ichikawa さん、まいど。
>デザインパターンのカタログが先人達のリファクタリングの結果なら、そこに立ち戻ろう。
うん。目から鱗ですね。
「オブジェクト指向は難しい」という言葉をよく聞きます。デザインパターンはそれに対する具体的な解だと思うんです。
「よく判らんかったら、達人の真似しとけばいいから」っていう。型のカタログ。
でもデザインパターンだけだと、「そこに到る過程」は相変わらず難しい言葉で語られている。
リファクタリングは、その「そこに到る過程」までを、「よう判らんのやったら、達人の手順を真似しといたらいいから」っていうカタログ。
だから、リファクタリング → デザインパターンっていうのが、OOD/OOP をやるための最強のツールになり得るのかなと。