06/02/26 09:20:16
>>924
> 別にデザパタ知らんでも簡単に入れ替えられるんだな。
そういう人にとってはデザパタって「共通の名前」という以外の意味はないんでしょうな。
> 仕様変更要求に対して、「面倒くさいなあ」以外に困ったことなんてないんです。
その「面倒くさいなぁ」ってーのはどんな感覚?
Aという要求がBという要求に変わった時、クラスの「追加だけ」で対処できる?
Aの機能を呼び出したりする部分を一切変更することなく、Bの機能を実現したクラスの
追加だけで対応できているんであれば、あんたはかなりの実力者だ。
> つーか仕様変更で困っていると言う話を聞くたびに不思議。いったいどんな
> 組み方してるんだろう。
仕様変更が起こった場合、変更とは直接関係のない部分(上記で言うところのAの機能を
呼び出している部分)まで修正が及ぶため、そこも含めてテストをやり直さなければなら
なくなるのが普通。 これによって工数が無茶苦茶増える。
> 素直に組んでれば改変追加etc、何も問題ないと思うんだけど。
客先からの要求ヒアリングでも、「どこに仕様変更が起こりそうか」なんてことは
ほとんど聞けないのが実態。 素直に組むことで問題が解決される例はほとんどない。
926:デフォルトの名無しさん
06/02/26 11:14:54
>>925
>その「面倒くさいなぁ」ってーのはどんな感覚?
単に仕事が増えてゴルア。精神的な問題のみ
>Aという要求がBという要求に変わった時、クラスの「追加だけ」で対処できる?
クラスかどうかはともかく、変更の規模によって
・Aを多少改造(現機能も維持したまま条件判断で追加のケース)
・Aをまるまる残してBを追加。
関係ないけど、どっちのケースもAの動作はとりあえず残しておく。
元に戻したい時ってのは常にあるから。容量が厳しい場合はケースバイケース
>変更とは直接関係のない部分(Aの機能を呼び出している部分)まで修正が及ぶ
AをBに変えるならAを呼び出しているところは全然無関係だとはいえないよ。
変えたところをテストするのはしゃーないじゃん
まったく関係ないところはあたりまえだが変更など皆無。
>「どこに仕様変更が起こりそうか」予測できない
だから、変更を許容せよ、がおれの組む時の一番頭にあること。
プログラムを仕事にしてから一番学んだのはそれだね。
927:デフォルトの名無しさん
06/02/26 11:58:16
ソース管理ツールくらい使ってるだろうし、
戻すなんて手間じゃないだろうに。
…じゃなくて。冷静になろう。
話がデザパタから微妙にずれてきてる。
これはニュアンス的にはリファクタリングのネタだよな。
928:925
06/02/26 12:11:13
>>926
> AをBに変えるならAを呼び出しているところは全然無関係だとはいえないよ。
そうとも言えないんじゃない?
AとかBとかの機能と、それを呼び出す部分のインタフェースをうまく設計すると
AがBに変わったとしても、Aを呼び出しているところにいっさい手を加える必要は
無くなるわけです。
さらに、Aのインスタンスを生成する部分に工夫を加えておくと、設定ファイルを
いじるだけでAのインスタンスでもBのインスタンスでも生成できるようになるん
ですな。 コードに手を加える(修正する)必要が無くなるんです。
> 変えたところをテストするのはしゃーないじゃん
その通り。 だから修正部分が減るとテスト工数が激減することになる。
> だから、変更を許容せよ、がおれの組む時の一番頭にあること。
デザパタ(というかオブジェクト指向原則の多く)が言っているのはまさにそこ。
変更を許容する以上、変更点を局所化することこそを考えるべきではないで
しょうか?
929:デフォルトの名無しさん
06/02/26 12:14:07
>>927
> 話がデザパタから微妙にずれてきてる。
> これはニュアンス的にはリファクタリングのネタだよな。
いや、ずれてないと思うぞ。
デザパタを利用することでリファクタリングも楽になるという点で、関連はあるが。
930:デフォルトの名無しさん
06/02/26 12:22:05
>>927
スレ違いごめんよ
>ソース管理ツールくらい使ってるだろうし、
>戻すなんて手間じゃないだろうに。
単純に戻すとかいう問題じゃなくて、どっちも使いたいとかなる
場合もあるからプログラム的に共存させておくことを念頭におい
て作っている
>>928
>AがBに変わったとしても、
もちろん外見が同じなら何も変更はしないよ。
ただそうじゃない場合もあるし。(まれと言えばまれ)
まあ、
>設定ファイル
それをもっと進めている。外見のインターフェースがまったく
変わったとしてもコードのビルドしなおしなんてやんない。
ビルドしなおすのはまったく新しい機能追加と
大好きな最適化やる時だけ
931:925
06/02/26 12:38:28
>>930
> もちろん外見が同じなら何も変更はしないよ。
> ただそうじゃない場合もあるし。(まれと言えばまれ)
外見(つまりインタフェース)を同じになるようにするってーのが、システムを設計する
際の肝であり、GoF本が主張している「インタフェースに対して設計する」ということで
すね。
「そうじゃない場合もあるし」というのは、まだまだ精進する余地があるってことでしょう。
(とはいえ、完璧に予想するなんて、神にしかできないだろうが。w)
そういった観点から見た場合、デザパタは「変化しそうな部分の外見(インタフェース)を
汎用的な形に変形するための設計をカタログ化」したものと言えるんじゃないかな。
デザパタを使うと無意味なクラスが多くできるとか、デザパタを用いて失敗したという
のは、こういった変形を必要以上にシステム内に持ち込んだり、誤った変形をしてしまった
結果に起因するのではないかと言ってみる。
932:デフォルトの名無しさん
06/02/26 17:15:45
>>928
>AがBに変わったとしても、Aを呼び出しているところにいっさい手を加える必要は
>無くなるわけです。
これってソースコードだけの話であってテストは必要になるから手間としては全く意味ない。
933:デフォルトの名無しさん
06/02/26 19:37:56
>>932
> これってソースコードだけの話であってテストは必要になるから手間としては全く意味ない。
ふっ、、、甘いな。
テストが必要になるとすれば、正しいインスタンスが生成されていることの確認だけだろう?
934:デフォルトの名無しさん
06/02/26 21:52:34
>これってソースコードだけの話であってテストは必要になるから手間としては全く意味ない。
ひょっとして、ここは笑いどころだったのか?
ソースコードだけの話って、ソースコードいじると色々とたちの悪い問題が出てくるんだが。
935:デフォルトの名無しさん
06/02/26 22:08:04
というふうに、デザパタ肯定派でも意見の対立がある(・∀・)
936:デフォルトの名無しさん
06/02/26 23:47:30
>>933
>テストが必要になるとすれば、正しいインスタンスが生成されていることの確認だけだろう?
そのテストってどうやるの?
何を証明すればキチンとした動作になってると言えるのかわからない。
とりあえず全パターン出して、今回の変更で変わる部分を抜き出さないとテストは終わらない。
そういうふうに人に説明しにくい仕組みしてしまうよりは、ベタで書いたほうが早いと思う。単純に。
937:デフォルトの名無しさん
06/02/27 01:46:03
多分単体テストと結合テスト、外部テストがごっちゃになってるんだと思う。
938:デフォルトの名無しさん
06/02/27 01:48:05
テストの種別も組織によって違うしねw
939:デフォルトの名無しさん
06/02/27 02:58:03
>>937
それを含めて全パターンだしても>>936のいってることは代わらないと思う。
940:デフォルトの名無しさん
06/02/27 06:41:21
自動化できるところとできないところの切り分けができていないのかと。
941:デフォルトの名無しさん
06/02/27 07:48:49
>>936
> そのテストってどうやるの?
> 何を証明すればキチンとした動作になってると言えるのかわからない。
そんなことを聞くあなたは、ひょっとするとテストの際、毎回全てのケースをテストしているのかい?
(まぁ、xUnit 等をうまく使えば、そういったことも可能だし、効率もさほど低下しないだろうから、
毎回全てのケースをテストすることに対して否定はしないが。)
答えは色々あるだろうが、正しいインスタンスが生成されているかどうかを確認したいのならば
クラスBのコンストラクタが起動された際にコンソールメッセージを出すようにするというのは
一つの手じゃないか? まぁ、この手の方法は組織によって向き不向きがあるんだろうけど。
それよりも >>932 は >>934 の言ってたソースコードを触った時の危険性を認識しなさ過ぎ。
たいていの厄介なバグは、新規機能に作り込んでしまうのではなく、新規機能を追加した時に
既存機能側をいじり壊して作り込んでしまうものです。
942:デフォルトの名無しさん
06/02/27 08:30:39
交通事故と同じ。やるやつは繰り返す
943:デフォルトの名無しさん
06/02/27 09:12:00
かもな。
俺は絶対事故らない、、、とみんな思ってる。
944:デフォルトの名無しさん
06/02/27 10:31:57
むしろ事故らなかったことはありませんが(プログラムの方だよん。
車の方はやばいと思って運転するのやめた)
945:デフォルトの名無しさん
06/02/28 03:01:40
>>926の発言をみる限り、プログラミングはうまそうなので、
必要だと思わないのであれば別に無理して覚える必要はないんじゃない?
俺は面白かったから勉強したけど。
俺が得られたメリットは、コードの整理がうまくなったってことかな。
昔、色々コード書いてて、規模が大きくなればなるほど、整理の方法がわからず、
コードが汚くなることが悩みだったが、デザパタ覚えたことで少し改善した感じ。
あと「カタログ化して、みんなの共通の認識とする」っていうのはあんまメリットない気がする。
デザパタしらん人には無意味だし。ただの浮いてる奴としか見られない。
946:デフォルトの名無しさん
06/02/28 20:30:50
デザパタなくとも、プログラム上手くなればコード整理はできるけど
デザパタないと、共通認識にはできないから俺はそっちの方が重要だと思う
データ構造とアルゴリズム みたいな本がいっぱいあるけど
クラス構造とアルゴリズム になるのがデザパタだろう
どちらも丸暗記する必要はないけどな
947:デフォルトの名無しさん
06/02/28 22:12:30
「デザパタしらん人には無意味だし。」ってのが正論としてまかり通るのが問題だ。
948:デフォルトの名無しさん
06/03/01 01:13:50
>>947
つーかもう本でてないしw
流行りも廃れたしw
あのぶ厚い本を一冊読むことを強制するってのは流行らないと思うわ。
なんかもうちょっとお手軽なのじゃないとねぇ。
949:デフォルトの名無しさん
06/03/01 01:23:54
>>948
もう少し本屋にいった方がいいと思う
950:デフォルトの名無しさん
06/03/01 06:29:12
>>949
オススメは何?
951:デフォルトの名無しさん
06/03/01 14:20:46
>>947
うーん、無理だろう。
プログラム勉強するようになっていきなりデザインパターン勉強する奴とかいないだろ。
「関数で処理を分けるのは、なぜ必要なんですか」っていうレベルからだろうし。
100人のプログラマがいても20人くらいしか知ってる奴は期待できないとおもう。
それを20人の都合で、80人に本よめっていうのはわがまますぎだと思う。
所詮たよれるのは自分です。なんつって。
>>948
まあ、とりあえず、デザパタは得て損はないと思うよ。
ただ全部が全部、よいパターン/読んで欲しいパターンだとはいえないんだけど。
952:デフォルトの名無しさん
06/03/01 15:17:11
100人中100人が知っている必要はないだろう。
100人いたら半数以上は言われたとおりに部品製造していればいいコーディング担当だろうし。
設計を担当するアーキテクトチームなら常識的に知ってて当然だとは思う。
設計について議論しなければいけない人間同士でデザパタが共通認識でないのは問題。
使う・使わない・どこにどう適用するかは別問題として。
953:デフォルトの名無しさん
06/03/01 20:36:03
>>950
俺は結城さんの読んで覚えた、お勧め
読んではいないが、最近だと変なねーちゃん表紙のやつ評判よかったような
954:デフォルトの名無しさん
06/03/05 18:13:55
>>952
>設計について議論しなければいけない人間同士でデザパタが共通認識でないのは問題
なんで?
955:デフォルトの名無しさん
06/03/05 20:08:18
>>954
アーキテクトにとっては、良し悪し・使うべき/使わないべきまで含めて知ってて当然の知識だからな。
デザパタも知らない、共通の概念のない非常識な人間が寄ってたかって設計したシステムなど、お里が知れるわw
956:デフォルトの名無しさん
06/03/05 23:34:37
そうか「当然の知識」か。そして「共通の概念」か。
・・・それは思いこみであって現実の正しい認識であるとは思えないけどね。
957:デフォルトの名無しさん
06/03/05 23:39:43
>>955
具体的な根拠がなにも示されて無いな。
本当に理系の人間なのかどうか疑問
>>956
ね。
なんか思い込み強いよね。
958:デフォルトの名無しさん
06/03/06 00:19:40
デザパタのように今や古典とも言える超メジャーな設計上のスキームを
「知りもしない」ってのは、土方コーダーならともかく
アーキテクトとしては激しく問題があると思われ。
知った上で使う・使わないは別問題だがな。
959:デフォルトの名無しさん
06/03/06 00:43:55
知ったつもりになって使ったつもりになる。
形式だけ学んだので不必要に濫用する。
このパターンが少なくない気がする。
デザパタの粒度ってアーキテクトレベルなんかな?
どちらかと言うとプログラミング(詳細設計から下)レベルに思うんだが。
960:デフォルトの名無しさん
06/03/06 06:35:25
>>958
デザパタなんていつ必須事項になったんだか。
オブジェクト指向でもなんでもないし。
すっげどうでもいい部分の寄せ集めじゃん。
>知った上で使う・使わないは別問題だがな
これでデザパタは使えないって結論に至った人間をどうやって説得するのか?
961:デフォルトの名無しさん
06/03/06 06:43:31
>>959
> 知ったつもりになって使ったつもりになる。
> 形式だけ学んだので不必要に濫用する。
> このパターンが少なくない気がする。
ここのところは同意。 しかし、デザパタの真意はアーキテクトレベルにあると思うぞ。
それをコーディングの定石集だと誤解しているヤシが多すぎ。
>>960
> オブジェクト指向でもなんでもないし。
オブジェクト指向原理主義ですか?
90年代前半の呪縛に捕らわれてますな。
962:デフォルトの名無しさん
06/03/06 13:23:31
>>960
>すっげどうでもいい部分の寄せ集めじゃん。
そうかね?JavaとかC#とかの標準ライブラリ(java.langとかjava.ioとか)は、
デザパタを基準に作られてると思うけど、あれもすっげどうでもいい使えないライブラリかね?
あれらを見たときなかなかいいもんだと感じたもんだが。
まあ、良いか悪いかの感じ方は、人それぞれとは思うけどね。
>>961
俺も>>959と同じくプログラミングレベルの概念だと思うのだが、
デザパタの本は色々読んだが、アーキテクトレベルの説明をする本だとするならば、
あそこまで本の中身がソースコードだらけにはならないと思う。
963:962
06/03/06 13:28:47
まあ、俺がアーキテクトという言葉をよく理解していないからかもしれんがな。
アーキテクトという言葉は正直、抽象的すぎてなにをさしている言葉なのかわからんし。
964:961
06/03/06 15:08:20
>>962
> 俺も>>959と同じくプログラミングレベルの概念だと思うのだが、
> デザパタの本は色々読んだが、アーキテクトレベルの説明をする本だとするならば、
> あそこまで本の中身がソースコードだらけにはならないと思う。
デザパタは、クラスの関連を用いることで、いかにして実装と抽象を切り離すのかという
ことを明確にしている点が肝なんだと考えています。
そういった意味では、本の中身をあそこまでソースコードだらけにしてしまう必要はなか
ったんじゃないかな。 (クラス図とせいぜい状態遷移図があれば十分だったはず。)
実は「GoF本の翻訳がイマイチで理解しづらかった」→「みんなソースコードに頼ろうと
する」というだけなのではないかと。
(かの結城氏もJavaで書かれてないから判りにくいんだと誤解していたし。)
そもそもデザパタがプログラミングレベルの概念だったとしたら、もっと色々な言語が
シンタックスシュガーとしてデザパタ構文を採用してるんじゃないか?
> まあ、俺がアーキテクトという言葉をよく理解していないからかもしれんがな。
> アーキテクトという言葉は正直、抽象的すぎてなにをさしている言葉なのかわからんし。
アーキテクトほどいい加減な言葉もそうそうないと思う。
あれってプログラミングが設計工程に属していることを認めたくない連中が、
(彼らの言う)設計工程とプログラミング工程のギャップを埋めるために作り出した
役割なんだと思うな。
965:デフォルトの名無しさん
06/03/06 18:49:58
>>964
>デザパタは、クラスの関連を用いることで、いかにして実装と抽象を切り離すのかという
>ことを明確にしている点が肝なんだと考えています。
よく考えると切り離す意味が全くわからないな。
966:デフォルトの名無しさん
06/03/06 19:20:35
>>965
> よく考えると切り離す意味が全くわからないな。
変更に強くするため。
いくらクラスを作って「カプセル化」だと叫んでも、インタフェース部分に変更が
あると、そのクラスを変更した時、山火事のように影響度が飛び火して広がって
いく。
967:デフォルトの名無しさん
06/03/06 20:00:30
>>966
変更に強いかどうかってそんなに重要かぁ?
俺には設計と実装がマッチしてない糞みたいなソースができるような気がするぜ。
つーかさ、変更に強いかどうかじゃなくて、もっと大事なこととして設計と実装とみんなのイメージが
一致してることの方が何倍も大事なことのように思えるんだけど。
968:デフォルトの名無しさん
06/03/06 20:01:59
ああ、言いたいことはさ。
変更されたらそれに合わせて変更が必要になってもいいんじゃないの?
ってこと。
てゆうか、設計が変更されたのに実装がそのまんまっておかしいw
969:デフォルトの名無しさん
06/03/06 20:16:10
>>967
設計と実装はそんなに離れない 離れたらその設計参考にされてない
変更に強いって言うのは変更箇所が少ない、影響範囲が小さいってこと
釣りなのかマジなのか……
970:962
06/03/06 20:21:39
>>967-968
まあ、デザパタを覚えることで利点を感じなければ覚える必要は無いと思うけどね。
あと、「設計変更による変更に強い」というよりは、
設定ファイルや、オプションによる処理の変更には強くできるね。
一行変えるくらいで後々の処理を大きく変えることができるとか。
設計変更されたら実装かえるのは当然だぁね。
971:962
06/03/06 20:35:48
>>967
>つーかさ、変更に強いかどうかじゃなくて、もっと大事なこととして設計と実装とみんなのイメージが
>一致してることの方が何倍も大事なことのように思えるんだけど。
こりゃ同意だな。実装はともかく、設計(インターフェース)は、
万人がイメージしやすい&理解しやすいことが望ましい、というかそうすべきであると思う。
デザパタのほとんどのパターンは、実装の変更を容易にすることを目的としているかな。
例えば、データを読込&保存する処理をしたい場合に、保存する手法は何でもよいというとき、
その中身の実装は、普通にファイルで保存したり、DBにしたり、XMLにしたり、
と後々実装を変えたい、または、コマンドラインオプションや設定ファイルによって変えたいと
思った場合の変更に強くすることができるかと。
972:デフォルトの名無しさん
06/03/06 20:44:47
フト思ったんだが、、、
ひょっとしたらアンチデザパタってヤシは、設計時に無茶苦茶にデザパタを
適用した結果、設計結果とみんなのイメージが乖離してしまったという
暗い過去を持っているんジャマイカ?
973:デフォルトの名無しさん
06/03/07 00:18:43
そこで結城先生の登場ですよ。
>デザインパターンの目標の1つは、プログラムを再利用可能にすることです。
>つまり、どうやってプログラムを「部品」として再利用するかを考えているのです。
>ですから、プログラム例を「完成品」として見るのではなく、今後「機能を拡張していくもの」
>「変更を加えていくもの」として見るようにしましょう。
> ・どのような機能が拡張される可能性があるか?
> ・その機能拡張を行うときに修正が必要になるのはどのクラスか?
> ・修正が不要なのはどのクラスか?
>このような観点でデザインパターンを見ると、理解が深まるでしょう。
974:デフォルトの名無しさん
06/03/07 00:36:28
>変更に強いかどうかってそんなに重要かぁ?
極めて重要だと思う。特に脱ウォーターフォールを標榜する今後のJavaの開発形態としては特に。
と、いうかJavaの抽象化フレームワークやJunitやEclipseの強力なリファクタリング機能が
何の為に存在するのかといったら、やっぱ「変更しないのが前提」、っていうウォーターフォールの一番駄目駄目な
部分を徹底的に唾を吐き、"いかにソースを良くしていくか"、"「動いているソースは駄目ソースでも触るな」じゃなく
「ガリガリ直してどんどん洗練されたソースにリファクタリング」していくか"、
"余計なドキュメント製造に掛かるコストをカットする事で生ずるリスクをどこで吸収できるか"
等にあるわけで。
変更に強い、というのは客の仕様を満たすのと同じくらい重要だと思う。
975:デフォルトの名無しさん
06/03/07 00:49:56
世の中には二種類のアーキテクトが居る。
一方のアーキテクトはアンチパターンを認識・検出・除去することが出来る。
残りのアーキテクトは日々新たなアンチパターンを生産することが出来る。
後者多すぎ。
976:デフォルトの名無しさん
06/03/07 03:20:30
>>969
いや、だから、どんな変更に強いってのか謎。
変更したらさ、設計がかわるんだよね?
ここはいいよね?
影響範囲が最小っていったって、それってどんな変更をするかによってわからないよね?
普通にそれぞれのクラスに閉じ込めるように作っていれば結果的に変更時の影響範囲が最小になってるって話だよね。
要はメインじゃなくて付加価値みたいなもんでしょ?
それを勘違いしてこっちをメインにして変な仕組み入れてわざわざインターフェースとむりやり切り離してる
プログラムってのはそれだけで気持ち悪いと思うんだ。
おそらく、みて理解のしやすいソースにはなっていない。
977:デフォルトの名無しさん
06/03/07 07:30:31
>>976
> いや、だから、どんな変更に強いってのか謎。
「十分予測できるが、現時点では詳細が不明な変更」ですな。
そこを押さえずに何でもかんでも変更可能にしてやろう、あるいはとにかくデザパタを
適用しようという発想がいかんのです。
> 変更したらさ、設計がかわるんだよね?
> ここはいいよね?
ここはOK。 マクロな視点で見れば必ず設計は変わる。 しかしミクロな視点で
構成要素を一つずつ見ていき、影響が出る構成要素の数を極力減らす努力が
必要。
> 影響範囲が最小っていったって、それってどんな変更をするかによってわからないよね?
変更内容が判らないというのであれば、その通り。 しかし裏を返せば、変更の匂いが
するところに対してデザパタを適用できるということ。
伝家の宝刀はここぞという時にしか抜いてはならない(とはいえ意外と多かったりするがなw)。
> 普通にそれぞれのクラスに閉じ込めるように作っていれば結果的に変更時の影響範囲が最小になってるって話だよね。
それはダウト。 現状の静的なスナップショットを取っているだけのデザイナは、松竹梅で
言えば梅レベル。 そもそも現状のスナップショットをいくら睨んで見ても、そのどの部分が
変わりそうなのかといった情報は読みとれないものだ。 つまり「普通にそれぞれのクラスを
閉じこめるように作っていく」だけでは全然不足というわけだ。
978:デフォルトの名無しさん
06/03/07 07:31:26
(続き)
>>976
> 要はメインじゃなくて付加価値みたいなもんでしょ?
システムを作るだけ作ってそのまま逃げるような開発をするのであれば、現状のスナップ
ショットのみを用いて設計してもいいかもしれない。 (開発中に入ってくる要求変更と戦う
必要はあるが。) しかしその後の保守を考えると、変更に対する強度は極めて重要な
ことになるのだ。
> それを勘違いしてこっちをメインにして変な仕組み入れてわざわざインターフェースとむりやり切り離してる
> プログラムってのはそれだけで気持ち悪いと思うんだ。
> おそらく、みて理解のしやすいソースにはなっていない。
おそらく君が過去に接したシステムというのは伝家の宝刀を濫用したものなんだろう。
デザパタを適切に使用した場合のクラス図は、現状のスナップショットがどうなっている
のかという情報だけでなく、今後どういった部分が変化しそうなのかという情報もはっきりと
伝える判りやすいものになるのだ。
979:デフォルトの名無しさん
06/03/07 07:33:10
>>976
> 要はメインじゃなくて付加価値みたいなもんでしょ?
> それを勘違いしてこっちをメインにして変な仕組み入れてわざわざインターフェースとむりやり切り離してる
> プログラムってのはそれだけで気持ち悪いと思うんだ。
> おそらく、みて理解のしやすいソースにはなっていない。
俺も最近流行りのDIコンテナを利用した実装とインタフェースを分ける設計をみて
そう感じることがよくある。
IDEのデバッガでも追いづらいし、開発の効率を下げている一面もあるよな。
クラスの入れ替えが容易であるメリットは、ユニットテストの時にモックパターンで
やりやすい点ぐらいか・・・
オブジェクト指向本来のインタフェースの用途ではなく、
言語機能としてのインタフェースの機能を逆手に取ったような手法とも感じる。
980:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/03/07 08:01:01
>>979
> クラスの入れ替えが容易であるメリットは、ユニットテストの時にモックパターンで
> やりやすい点ぐらいか・・・
ユニットテスト時にモッククラスと入れ替えることができるということは、将来そのクラスに
対して変更があった場合、保守コストが引き下げられるということを意味しているはず。
> オブジェクト指向本来のインタフェースの用途ではなく、
> 言語機能としてのインタフェースの機能を逆手に取ったような手法とも感じる。
あなたの考えるオブジェクト指向本来のインタフェースの用途って何でしょう?
実装とインタフェースは無理矢理分けられてるのではなく、本来これらは別々のもので
あるべきなんじゃないかい?
982:デフォルトの名無しさん
06/03/07 12:17:18
>979
DIコンテナ使わないチームと使ったチームで比べられればいいけどね。
俺はもうDIコンテナなしの開発は考えたくないです。
まぁDIスレ(typoしてるが)でやるのが適切な話題だし、
あっち過疎ってるから盛り上げて欲しいってのが本音。
983:デフォルトの名無しさん
06/03/07 16:36:13
>将来そのクラスに
>対して変更があった場合、保守コストが引き下げられるということを意味しているはず。
タテマエとしてはよく見る意見だが、実際にそのようなシチュエーションは
よくあるのかな?
984:962
06/03/07 18:00:51
>>982
DIコンテナって使うとソース見やすくなったりとかするの?
DIコンテナって要は実装クラスをnewする部分をファクトリーじゃなくて、設定ファイルに書くみたいなやつだよね?
設定ファイルの情報を反映させたいときは再起動が必要みたいだから、
ファクトリーで書くのとあんま変わってないのであまり利点を感じないのだが…。コンパイルは不要だろうけど。
985:981
06/03/07 19:20:50
>>983
> タテマエとしてはよく見る意見だが、実際にそのようなシチュエーションは
> よくあるのかな?
意外とよくある。 新規開発の際、客先がちゃんと要求を出せてない部分が
開発途中にガンガン決まっていくんだが、デザパタ使ってると楽に対応でき
るぞ。 その都度リファクタリングしてもいいんだが、新規開発時だとユニット
テストデータもちゃんと揃ってないから、その手があまり使えないんだわ。
どの部分が曖昧なのか、ちゃんと客先ヒアリングして頭使わないとダメだけどね。
986:デフォルトの名無しさん
06/03/07 19:29:23
変更自体はよくあるんだが……その変更が、デザパタで吸収可能なものなのかは不明
デザパタ使う時点で、ある程度変更内容を予想してなきゃいかんと思う
987:デフォルトの名無しさん
06/03/07 19:55:01
インタフェース設計レベルから変更を余儀なくされる要求が多いな。
988:デフォルトの名無しさん
06/03/07 20:10:10
>>976
極端から極端に走らなくてもいいじゃん
仕様に載ってない機能を搭載し、ファイル以外にDBやgmailやSubversionも保存先として使えるようにして
隠しオプションでどんな仕様にも即対応! みたいのはそりゃだめだ
デザパタは問題の解決法として書かれていて
その問題があるときは割と的確な粒度の解決だと思うがどうだ?
あれでもまだ余分かな?
989:981
06/03/07 20:23:57
>>986
> 変更自体はよくあるんだが……その変更が、デザパタで吸収可能なものなのかは不明
> デザパタ使う時点で、ある程度変更内容を予想してなきゃいかんと思う
結構大変だけどね。 客先が「XXがYYという風に変わりそうだ」なんて自分から教えて
くれることはほとんどないけど、「ここがこうなるとかいうこと考えられます?」といった
聞き方を続けてると、答え方の雰囲気から変更されそうなところが見えてくる場合が多し。
で、実際に変更が発生すると、「実はそういうこともあろうかと、、、」と徳川機関長モードに
入る。
990:デフォルトの名無しさん
06/03/07 23:54:24
>984
この話題、DIスレにコピペしてもフォローしてくれますか?
(スレタイの意味での)デザパタとは全然関係ないと思うし。
>ソース見やすくなったりとかするの?
それはないです。
>988
>的確な粒度の解決だと思うがどうだ?
当方もそういう意識ですね。
そういう意味でもアーキテクトと言うよりは、
プログラミングレベルの話題だと思う。
フレームワーク作成チームが知っておくべきプラクティス。
991:962
06/03/08 01:21:50
>>990
>この話題、DIスレにコピペしてもフォローしてくれますか?
いやいいっすわ。DIスレみてたら同じ疑問を持っている人がいて勉強になりました。
ありがとう。あっ、でもやっぱり聞いてみようかな。
>>986
漏れの理解ではだけど、デザパタは実装の入れ替えが容易というのが売りだと思ってるから、
プログラムのやることが変わったらデザパタで組もうがなんだろうが変更する量はさほど変わらないと思う。
ただプログラムのやることは同じだけど実装を変える。
例えばパフォーマンスアップのために仕様変更するというのであれば、
それは実装の変更であるから、そういう変更には予想してなくとも強くなれると思う。
992:デフォルトの名無しさん
06/03/08 01:40:16
つーかさ、
ボタンクリックしたら、そのクリックしたメッセージが降りてくるその場所に
その処理が記述してあってほしい。(関数とかクラスとか)
そうでないと他の人間の書いたソースなんて追えない。
降りてきたメッセージをさらにどっかに飛ばす処理なんか入ってるともう駄目。
すげー面倒臭い。どうにかしてくれ。
単純に、ただ単純に書いて欲しい。
それだけ・・・それだけなんだ・・・orz
993:986
06/03/08 01:43:31
>>991
たとえ話になるけど 「100Vコンセントがあれば、殆どの電化製品に対応できる」 とか考えて実装してると、
いざ 「実は、この家電アース線がついてるんだけど……」 ってなったときに、コンセント側も改造しなくちゃいけないな、
って話をしてみた。
アース線無い家電製品のみに限定するなら、いくらでも変更は可能。変更に強い。
ただしアース線だとか外国用の特殊形状だとかが変更で出てくると面倒になるってことで、
どこまで変更を予測するか~って話だ。
ちなみに↑は Strategy を想定してみた。
解決策としては、Adapter が使えれば手っ取り早い。
どうでも良い。次ぎスレたのむ。
994:962
06/03/08 02:08:21
>>992
基本的には単純なものは単純に書くよww 必要になったときにしかデザパタは適用しないよ。
処理をたらいまわしにしている人のソースに悩まされてるの?たまにいるわなぁ。
デザパタだとかいって何でもかんでもたらいまわし処理書く人は。俺も追えない。30秒で諦める自信ある。
必要になった場合に適用すると効果を発揮するというのに、むやみに使うのは毒でしかない。
やるべき処理を素直にコードにすることが一番の解だというのに。
995:デフォルトの名無しさん
06/03/08 02:22:21
マ板的な話題になってしまうが
とあるベンダが俺様フレームワークを作成して
基本設計の説明に加えて
「ここはあのパターン、ここにはあのパターンを使ってる。」
みたいなことをのたまって
最後にパターン名と適用の有無からなる
2列23行の表を見せて、こんなにたくさん○が付いてますよ
(使った(ことになってる)パターンを○でカウントする。)
みたいな感じで胸を張ってた。
手段が目的にすり替わってしまうと大体ロクな結果を導かんよね。
アンチパターンの表を作るのは意味があるかも知れん。
なんか盛り上がってきたし次スレ欲しいなあ。
996:デフォルトの名無しさん
06/03/08 03:02:51
手段のためには目的を選ばない。
997:962
06/03/09 03:33:36
では私が建てよう。ひっそりと深夜に。
998:962
06/03/09 03:39:13
>新このホストでは、しばらくスレッドが立てられません。
>またの機会にどうぞ。。。
「【GoF】デザインパターン 6」で建てようとしたけど駄目でした orz
建てて誘導したいけど残り2レスしかない・・・。
999:デフォルトの名無しさん
06/03/09 04:28:57
次すれ
「【GoF】デザインパターン 6
スレリンク(tech板)
1000:デフォルトの名無しさん
06/03/09 04:29:41
コピペミスで「が残ってたorz
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。