[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 16:54 / Filesize : 288 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

〔隔離〕デザインパターンは本当に必要か?〔スレ〕



1 名前:デフォルトの名無しさん mailto:sage [2005/06/21(火) 19:09:56 ]
そもそもデザインパターン自体どうなのよ?って話はここでやれ。

969 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 20:16:10 ]
>>967
設計と実装はそんなに離れない 離れたらその設計参考にされてない
変更に強いって言うのは変更箇所が少ない、影響範囲が小さいってこと
釣りなのかマジなのか……

970 名前:962 mailto:sage [2006/03/06(月) 20:21:39 ]
>>967-968
まあ、デザパタを覚えることで利点を感じなければ覚える必要は無いと思うけどね。

あと、「設計変更による変更に強い」というよりは、
設定ファイルや、オプションによる処理の変更には強くできるね。
一行変えるくらいで後々の処理を大きく変えることができるとか。
設計変更されたら実装かえるのは当然だぁね。

971 名前:962 mailto:sage [2006/03/06(月) 20:35:48 ]
>>967
>つーかさ、変更に強いかどうかじゃなくて、もっと大事なこととして設計と実装とみんなのイメージが
>一致してることの方が何倍も大事なことのように思えるんだけど。
こりゃ同意だな。実装はともかく、設計(インターフェース)は、
万人がイメージしやすい&理解しやすいことが望ましい、というかそうすべきであると思う。

デザパタのほとんどのパターンは、実装の変更を容易にすることを目的としているかな。

例えば、データを読込&保存する処理をしたい場合に、保存する手法は何でもよいというとき、
その中身の実装は、普通にファイルで保存したり、DBにしたり、XMLにしたり、
と後々実装を変えたい、または、コマンドラインオプションや設定ファイルによって変えたいと
思った場合の変更に強くすることができるかと。

972 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 20:44:47 ]
フト思ったんだが、、、
ひょっとしたらアンチデザパタってヤシは、設計時に無茶苦茶にデザパタを
適用した結果、設計結果とみんなのイメージが乖離してしまったという
暗い過去を持っているんジャマイカ?



973 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 00:18:43 ]
そこで結城先生の登場ですよ。

>デザインパターンの目標の1つは、プログラムを再利用可能にすることです。
>つまり、どうやってプログラムを「部品」として再利用するかを考えているのです。
>ですから、プログラム例を「完成品」として見るのではなく、今後「機能を拡張していくもの」
>「変更を加えていくもの」として見るようにしましょう。
> ・どのような機能が拡張される可能性があるか?
> ・その機能拡張を行うときに修正が必要になるのはどのクラスか?
> ・修正が不要なのはどのクラスか?
>このような観点でデザインパターンを見ると、理解が深まるでしょう。

974 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 00:36:28 ]
>変更に強いかどうかってそんなに重要かぁ? 

極めて重要だと思う。特に脱ウォーターフォールを標榜する今後のJavaの開発形態としては特に。
と、いうかJavaの抽象化フレームワークやJunitやEclipseの強力なリファクタリング機能が
何の為に存在するのかといったら、やっぱ「変更しないのが前提」、っていうウォーターフォールの一番駄目駄目な
部分を徹底的に唾を吐き、"いかにソースを良くしていくか"、"「動いているソースは駄目ソースでも触るな」じゃなく
「ガリガリ直してどんどん洗練されたソースにリファクタリング」していくか"、
"余計なドキュメント製造に掛かるコストをカットする事で生ずるリスクをどこで吸収できるか"
等にあるわけで。

変更に強い、というのは客の仕様を満たすのと同じくらい重要だと思う。

975 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 00:49:56 ]
世の中には二種類のアーキテクトが居る。

一方のアーキテクトはアンチパターンを認識・検出・除去することが出来る。
残りのアーキテクトは日々新たなアンチパターンを生産することが出来る。

後者多すぎ。

976 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 03:20:30 ]
>>969
いや、だから、どんな変更に強いってのか謎。
変更したらさ、設計がかわるんだよね?
ここはいいよね?
影響範囲が最小っていったって、それってどんな変更をするかによってわからないよね?
普通にそれぞれのクラスに閉じ込めるように作っていれば結果的に変更時の影響範囲が最小になってるって話だよね。
要はメインじゃなくて付加価値みたいなもんでしょ?
それを勘違いしてこっちをメインにして変な仕組み入れてわざわざインターフェースとむりやり切り離してる
プログラムってのはそれだけで気持ち悪いと思うんだ。
おそらく、みて理解のしやすいソースにはなっていない。

977 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 07:30:31 ]
>>976
> いや、だから、どんな変更に強いってのか謎。
「十分予測できるが、現時点では詳細が不明な変更」ですな。
そこを押さえずに何でもかんでも変更可能にしてやろう、あるいはとにかくデザパタを
適用しようという発想がいかんのです。

> 変更したらさ、設計がかわるんだよね?
> ここはいいよね?
ここはOK。 マクロな視点で見れば必ず設計は変わる。 しかしミクロな視点で
構成要素を一つずつ見ていき、影響が出る構成要素の数を極力減らす努力が
必要。

> 影響範囲が最小っていったって、それってどんな変更をするかによってわからないよね?
変更内容が判らないというのであれば、その通り。 しかし裏を返せば、変更の匂いが
するところに対してデザパタを適用できるということ。
伝家の宝刀はここぞという時にしか抜いてはならない(とはいえ意外と多かったりするがなw)。

> 普通にそれぞれのクラスに閉じ込めるように作っていれば結果的に変更時の影響範囲が最小になってるって話だよね。
それはダウト。 現状の静的なスナップショットを取っているだけのデザイナは、松竹梅で
言えば梅レベル。 そもそも現状のスナップショットをいくら睨んで見ても、そのどの部分が
変わりそうなのかといった情報は読みとれないものだ。 つまり「普通にそれぞれのクラスを
閉じこめるように作っていく」だけでは全然不足というわけだ。




978 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 07:31:26 ]
(続き)
>>976
> 要はメインじゃなくて付加価値みたいなもんでしょ?
システムを作るだけ作ってそのまま逃げるような開発をするのであれば、現状のスナップ
ショットのみを用いて設計してもいいかもしれない。 (開発中に入ってくる要求変更と戦う
必要はあるが。)  しかしその後の保守を考えると、変更に対する強度は極めて重要な
ことになるのだ。

> それを勘違いしてこっちをメインにして変な仕組み入れてわざわざインターフェースとむりやり切り離してる
> プログラムってのはそれだけで気持ち悪いと思うんだ。
> おそらく、みて理解のしやすいソースにはなっていない。
おそらく君が過去に接したシステムというのは伝家の宝刀を濫用したものなんだろう。
デザパタを適切に使用した場合のクラス図は、現状のスナップショットがどうなっている
のかという情報だけでなく、今後どういった部分が変化しそうなのかという情報もはっきりと
伝える判りやすいものになるのだ。


979 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 07:33:10 ]
>>976
> 要はメインじゃなくて付加価値みたいなもんでしょ?
> それを勘違いしてこっちをメインにして変な仕組み入れてわざわざインターフェースとむりやり切り離してる
> プログラムってのはそれだけで気持ち悪いと思うんだ。
> おそらく、みて理解のしやすいソースにはなっていない。

俺も最近流行りのDIコンテナを利用した実装とインタフェースを分ける設計をみて
そう感じることがよくある。
IDEのデバッガでも追いづらいし、開発の効率を下げている一面もあるよな。
クラスの入れ替えが容易であるメリットは、ユニットテストの時にモックパターンで
やりやすい点ぐらいか・・・

オブジェクト指向本来のインタフェースの用途ではなく、
言語機能としてのインタフェースの機能を逆手に取ったような手法とも感じる。


980 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 07:51:27 ]
>>973
> そこで結城先生の登場ですよ。

> >デザインパターンの目標の1つは、プログラムを再利用可能にすることです。
> >つまり、どうやってプログラムを「部品」として再利用するかを考えているのです。

注意すべきはここでの「部品」,「再利用」という表現ですな。

A, B, C, D, E, F, Gという7つのクラスで構成されたシステムがあったとする。
普通に「部品」というと、例えばCとかDというクラスを思い浮かべ,「再利用」というと
そういったクラスを他のシステムから利用することを想像してしまいがちになる。

しかし、デザパタのいう「部品」、「再利用」は違う。
デザパタでいう「部品」というのは、「Cというクラスから見た場合はA, B, D, E, F, Gと
いう6つのクラス」であり、Cが変更になった時にこれら6つのクラスに影響を与える
ことなく、「このシステム自体から見て6つのクラスを再利用する」ということだ。


981 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 08:01:01 ]
>>979
> クラスの入れ替えが容易であるメリットは、ユニットテストの時にモックパターンで
> やりやすい点ぐらいか・・・
ユニットテスト時にモッククラスと入れ替えることができるということは、将来そのクラスに
対して変更があった場合、保守コストが引き下げられるということを意味しているはず。

> オブジェクト指向本来のインタフェースの用途ではなく、
> 言語機能としてのインタフェースの機能を逆手に取ったような手法とも感じる。
あなたの考えるオブジェクト指向本来のインタフェースの用途って何でしょう?
実装とインタフェースは無理矢理分けられてるのではなく、本来これらは別々のもので
あるべきなんじゃないかい?


982 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 12:17:18 ]
>979
DIコンテナ使わないチームと使ったチームで比べられればいいけどね。
俺はもうDIコンテナなしの開発は考えたくないです。

まぁDIスレ(typoしてるが)でやるのが適切な話題だし、
あっち過疎ってるから盛り上げて欲しいってのが本音。

983 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 16:36:13 ]
>将来そのクラスに
>対して変更があった場合、保守コストが引き下げられるということを意味しているはず。

タテマエとしてはよく見る意見だが、実際にそのようなシチュエーションは
よくあるのかな?



984 名前:962 mailto:sage [2006/03/07(火) 18:00:51 ]
>>982
DIコンテナって使うとソース見やすくなったりとかするの?
DIコンテナって要は実装クラスをnewする部分をファクトリーじゃなくて、設定ファイルに書くみたいなやつだよね?

設定ファイルの情報を反映させたいときは再起動が必要みたいだから、
ファクトリーで書くのとあんま変わってないのであまり利点を感じないのだが…。コンパイルは不要だろうけど。

985 名前:981 mailto:sage [2006/03/07(火) 19:20:50 ]
>>983
> タテマエとしてはよく見る意見だが、実際にそのようなシチュエーションは
> よくあるのかな?

意外とよくある。 新規開発の際、客先がちゃんと要求を出せてない部分が
開発途中にガンガン決まっていくんだが、デザパタ使ってると楽に対応でき
るぞ。  その都度リファクタリングしてもいいんだが、新規開発時だとユニット
テストデータもちゃんと揃ってないから、その手があまり使えないんだわ。
どの部分が曖昧なのか、ちゃんと客先ヒアリングして頭使わないとダメだけどね。


986 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 19:29:23 ]
変更自体はよくあるんだが……その変更が、デザパタで吸収可能なものなのかは不明
デザパタ使う時点で、ある程度変更内容を予想してなきゃいかんと思う

987 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 19:55:01 ]
インタフェース設計レベルから変更を余儀なくされる要求が多いな。




988 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 20:10:10 ]
>>976
極端から極端に走らなくてもいいじゃん
仕様に載ってない機能を搭載し、ファイル以外にDBやgmailやSubversionも保存先として使えるようにして
隠しオプションでどんな仕様にも即対応! みたいのはそりゃだめだ

デザパタは問題の解決法として書かれていて
その問題があるときは割と的確な粒度の解決だと思うがどうだ?
あれでもまだ余分かな?

989 名前:981 mailto:sage [2006/03/07(火) 20:23:57 ]
>>986
> 変更自体はよくあるんだが……その変更が、デザパタで吸収可能なものなのかは不明
> デザパタ使う時点で、ある程度変更内容を予想してなきゃいかんと思う

結構大変だけどね。 客先が「XXがYYという風に変わりそうだ」なんて自分から教えて
くれることはほとんどないけど、「ここがこうなるとかいうこと考えられます?」といった
聞き方を続けてると、答え方の雰囲気から変更されそうなところが見えてくる場合が多し。
で、実際に変更が発生すると、「実はそういうこともあろうかと、、、」と徳川機関長モードに
入る。


990 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 23:54:24 ]
>984
この話題、DIスレにコピペしてもフォローしてくれますか?
(スレタイの意味での)デザパタとは全然関係ないと思うし。

>ソース見やすくなったりとかするの?
それはないです。

>988
>的確な粒度の解決だと思うがどうだ?
当方もそういう意識ですね。
そういう意味でもアーキテクトと言うよりは、
プログラミングレベルの話題だと思う。
フレームワーク作成チームが知っておくべきプラクティス。

991 名前:962 mailto:sage [2006/03/08(水) 01:21:50 ]
>>990
>この話題、DIスレにコピペしてもフォローしてくれますか?
いやいいっすわ。DIスレみてたら同じ疑問を持っている人がいて勉強になりました。
ありがとう。あっ、でもやっぱり聞いてみようかな。

>>986
漏れの理解ではだけど、デザパタは実装の入れ替えが容易というのが売りだと思ってるから、
プログラムのやることが変わったらデザパタで組もうがなんだろうが変更する量はさほど変わらないと思う。

ただプログラムのやることは同じだけど実装を変える。
例えばパフォーマンスアップのために仕様変更するというのであれば、
それは実装の変更であるから、そういう変更には予想してなくとも強くなれると思う。

992 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 01:40:16 ]
つーかさ、
ボタンクリックしたら、そのクリックしたメッセージが降りてくるその場所に
その処理が記述してあってほしい。(関数とかクラスとか)

そうでないと他の人間の書いたソースなんて追えない。
降りてきたメッセージをさらにどっかに飛ばす処理なんか入ってるともう駄目。
すげー面倒臭い。どうにかしてくれ。

単純に、ただ単純に書いて欲しい。
それだけ・・・それだけなんだ・・・orz

993 名前:986 mailto:sage [2006/03/08(水) 01:43:31 ]
>>991
たとえ話になるけど 「100Vコンセントがあれば、殆どの電化製品に対応できる」 とか考えて実装してると、
いざ 「実は、この家電アース線がついてるんだけど……」 ってなったときに、コンセント側も改造しなくちゃいけないな、
って話をしてみた。

アース線無い家電製品のみに限定するなら、いくらでも変更は可能。変更に強い。
ただしアース線だとか外国用の特殊形状だとかが変更で出てくると面倒になるってことで、
どこまで変更を予測するか〜って話だ。

ちなみに↑は Strategy を想定してみた。
解決策としては、Adapter が使えれば手っ取り早い。


どうでも良い。次ぎスレたのむ。

994 名前:962 mailto:sage [2006/03/08(水) 02:08:21 ]
>>992
基本的には単純なものは単純に書くよww 必要になったときにしかデザパタは適用しないよ。

処理をたらいまわしにしている人のソースに悩まされてるの?たまにいるわなぁ。
デザパタだとかいって何でもかんでもたらいまわし処理書く人は。俺も追えない。30秒で諦める自信ある。

必要になった場合に適用すると効果を発揮するというのに、むやみに使うのは毒でしかない。
やるべき処理を素直にコードにすることが一番の解だというのに。

995 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 02:22:21 ]
マ板的な話題になってしまうが

とあるベンダが俺様フレームワークを作成して
基本設計の説明に加えて
「ここはあのパターン、ここにはあのパターンを使ってる。」
みたいなことをのたまって
最後にパターン名と適用の有無からなる
2列23行の表を見せて、こんなにたくさん○が付いてますよ
(使った(ことになってる)パターンを○でカウントする。)
みたいな感じで胸を張ってた。

手段が目的にすり替わってしまうと大体ロクな結果を導かんよね。
アンチパターンの表を作るのは意味があるかも知れん。

なんか盛り上がってきたし次スレ欲しいなあ。

996 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 03:02:51 ]
手段のためには目的を選ばない。

997 名前:962 mailto:sage [2006/03/09(木) 03:33:36 ]
では私が建てよう。ひっそりと深夜に。



998 名前:962 mailto:sage [2006/03/09(木) 03:39:13 ]
>新このホストでは、しばらくスレッドが立てられません。
>またの機会にどうぞ。。。
「【GoF】デザインパターン 6」で建てようとしたけど駄目でした orz
建てて誘導したいけど残り2レスしかない・・・。

999 名前:デフォルトの名無しさん mailto:sage [2006/03/09(木) 04:28:57 ]
次すれ

「【GoF】デザインパターン 6
pc8.2ch.net/test/read.cgi/tech/1141846078/


1000 名前:デフォルトの名無しさん mailto:sage [2006/03/09(木) 04:29:41 ]
コピペミスで「が残ってたorz

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<288KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef