ウェブプログラミングで使えるデザインパターン
結構良スレっぽいスレタイなのに、>>1 がクソで萎え とにかくリクエストとレスポンスが一組になる 1パターンリクエストに対し数パターンのレスポンスがあって、他パターンのリクエストと共通だったりする サーブレットは知らんがCGI、PHPあたりだとだいたい フォームデータ処理 if エラー表示1 else if エラー表示2 ・・・ else if 処理1 フェーズ1表示 else if 処理2 フェーズ2表示 ・・・・ って感じになるな >>6 えと、>>1 はGoF辺りのデザパタを聞きたいんではないかと。 後、それダサい。 >>7 だって>>6 =>>1 だもん じゃあカコイイやつカモン GoFに限定しないオブジェクト指向にも限定しない 寧ろウェブプログラミングのためのパターン GOFのどれがWEBプログラミングに使われるんですか? PHP関連でそういった事を解説してるサイトなかった?>WEBPrograming/DesignPattern Stateパターンでログイン・ユーザの認証状態を管理する。etc コーディングに特化しない話題でもいいなら、 WEB関連&&デザインパターンという事で、こんなサイトも。 http://www.designpattern.lu.unisi.ch/index.htm まずはPerl5やPHPにGoFを翻訳することからはじめるか Perl5やPHPって継承やインターフェース使えたっけ? http://www.pat.hi-ho.ne.jp/dimension/sample/sample_class_list.shtml のサイトでもPHPでデザパタしてる。 プログラム板にも初心者向けのデザパタスレがあるから、 デザインパターンって何?って人はそちらも合わせて見るといいかと。 >>13 GOFの実装例なら、すでに幾つかありますね。 http://www.perldesignpatterns.com/ Perl5 や PHP4 にはインターフェースのための構文は用意されていないので、 (標準では)Javaみたいにインターフェースで定義したメソッドの実装を強制する事は出来ません。 多くのサンプルでは、インターフェース代わりに空メソッドを定義しているだけか、 実行時にメソッドが実装されていなければ終了する。と、いったものが殆んどの様です。 インターフェースを継承したクラスがそのメソッドを実装しているか確認したいのであれば。 perlについては、CPANにコンパイル時にインターフェースをチェックするモジュールがあります。 PHPでは、PHP5からインターフェースが導入されています。 ごめん、インターフェースって何?継承とは違うのかい? インターフェースは知らんけど継承はわかるのか? なんじゃそりゃ ウェブプログラミングじゃあんまGoF通用しないんじゃね? Perl PHP Rubyじゃインターフェース無いし、GUIもHTML吐いて作るわけだし、 インスタンスを次のセッションで使うのもしんどいじゃん >>18 >Perl PHP Rubyじゃインターフェース無いし プロトタイプベースだからいらんでしょ。アホか。 >GUIもHTML吐いて作るわけだし、 むしろその辺のGUI部品より融通が利くわけだが。 後、J2EEとかASP.NETはWebプログラミングに入らないんですか? 完全無料主義者のあなたの中では。 オブジェクト指向が必要なほど大規模になることもなく やっぱり>>6 みたいなものになっちまうのか >>6 を汎用的に書ければいいんだけど >>18 オブジェクトの永続化について調べてみるといいかも。 PHPなんかでは、普通にセッションにオブジェクトを格納出来るよ。 >>20 一連の処理をひとつのアプリケーションとし、 各処理をそのアプリケーションの状態とみなすと、 Stateパターンを適応できますね。perlのCGI::Application みたいに。 勿論、非オブジェクト指向でも同様の処理は可能です。 ハッシュ等にキーと処理へのポインタを登録し、 与えられたキーの処理を呼び出すといった方法で、冗長な分岐から解放されます。 ところで、ウェブプログラミングで*使える*(eq 有用な?)デザインパターンって、 例えばどんなの? Webプログラミングの場合、GUIより、モデルやコントローラ周りでの プログラミングでデザインパターンを多用するケースが多い気が。 結城 浩著書の本は役立ってます。 >>19 がなんでそんな必死になるのかわからんし 全然反論になってない ごめん、クラスの組み合わせがデザインパターン? つかデザインパターンを易しく説明きぼんぬ。まじで。 Web Service なシステムを作る上でのデザインパターンなら考えられるかも ConcreteStrategy を一個の CGI として実装して… うーいまいちメリットないな フォームデータ処理 if obj=new Hoge(query); else if obj=new Piyo(query); else if obj=new Foo(query); else if obj=new Bar(query); ・・・・ obj.proc >>6 とあんま変わらんな >>25 オブジェクト指向にクラスが必須ではないのと同じくらい、 デザインパターンにオブジェクト指向が必須という訳ではないと思う。(私見) オブジェクト指向以外でも応用することが出来ます。 >>28 >>22 の方法、伝わらなかったかな。サンプルこんな感じです。 use CGI; my $query = new CGI; my $app = new App( func1 => \$func1, func2 => \&func2, func3 => \&func3 ); $app->exec($query->param('mode'), $query); sub func1 { my ($query) = @_; print "func1\n"; } sub func2 { my ($query) = @_; print "func2\n"; } sub func3 { my ($query) = @_; print "func3\n"; } package App; sub new { my ($class, %menu) = @_; bless({menu => \%menu}, $class); } sub exec { my ($self, $key, @args) = @_; if (ref $self->{menu}->{$ket} eq 'CODE') { &{$self->{menu}->{$key}}(@args); } } >> 23 アプリケーションサーバや、フレームワーク内でなら使われてる例は多いよね。GOFに限らず。 うーん、OOP/GOF な話題がメインなのかな、ここ? WEBパターンとかの話題はスレor板違い? http://www.c2.com/cgi/wiki?WebsitePatterns >>31 非オブジェクト指向言語でオブジェクト指向ごっこしたら大体は破綻するけどね。 言語もパターンも使いよう。 あんたの実力はソースコードレビューではなく客先試験で発揮して下さいよって感じになりかねない。 25です。 >>31 ますます分からなくなりました。 これって特殊な例じゃない? >>34 だからぐぐれよ 解説サイトいくらでもあるだろ それか本かって読め >>34 だからぐぐれよ 解説サイトいくらでもあるだろ それか本かって読め だってよ。(w >>34 だからぐぐれよ 解説サイトいくらでもあるだろ それか本かって読め だってよ。(w だってよ。(w >>35-37 みたいなのはプロトタイプパターンなのかな ごめん、混乱させるような事言っちゃたかな。>25 http://www.hyuki.com/dp/dpfaq.html DesignPatterns FAQ日本語訳 パターンとは、あるコンテキスト(状況・背景)上の問題に対する一つの解決策。 繰返し発生するコンテキストは、フォームデータ処理などで発生する if else の条件分岐 like >6 >28 問題は、条件分岐の文にbugが混入しやすい事 解決策の一つは、>22 冗長な分岐を排除する。 これなら、オブジェクト指向でなくとも、ハッシュの様なデータ構造さえ使えれば適用できるでしょう? これだけでは不十分で、これ以外にもこのパターンはどう言った時に適用すると良いとか、 適用した場合にどういった状況になるか、他に考慮するべき事もパターンに記述されます。 詳しくはパターン・ランゲージについて調べてみて。 "パターン"が理解出来たら、デザインパターンはすぐ理解出来ると思う。でも 単純に、すべてのクラスの組合せがデザインパターンと呼ばれるわけではない。(FAQにもそう書かれている) "パターン"として有益な情報に成り得るのは、特定の条件の元の問題に対して。 組合せを指して"パターン"と呼んでいるのではないので。 デザインパターンの考え方は、オブジェクト指向をサポートしていない言語にとっても有用だと思う。 別に非OOP言語でのOOを推奨しているわけではないよ。>18 >19 >24 に対するフォローのつもり。>32 コソーリとデザインパターンって何と聞いていいですか >>38 phpにおいて、というならまぁそうなのかもな。 リファクタリングされてないようなのがいっぱいあるけど。 なんか重いし、無駄が多いし、好きになれない >>44 >リファクタリングされてないようなのがいっぱいあるけど。 は再利用の際の技であり成果物にわざわざ適用しても仕方ないのでは? >>44 実運用で使うようなモジュールはだいたい限られてるし、 そういうモジュールはよくメンテされてて 実用的で使えるのは結構あると思うけど。 ライブラリからリファクタリングしないと 重かったりして困るようなパフォーマンス命な 仕事なんてやったこと無いので そういう時に使うべきかどうかというのは 判断が必要かもしれないけど >>46 だな。 なんらかのライブラリ群や、フレームワークを使ったとき、 ハード資源消費量は、無駄な機能の占める割合が高かったりするもんな。 それでも、漏れらは使うのさ。 信頼性のあるライブラリだし、開発コストが下がるから。 客から動作がにぶくなってきたって、言われたら、 「分散しましょう!サバ増やしましょう!お任せ下さい!」ってな感じで対応。 宇摩ー。 >>31 よりもっと使えるやつカモン 実際modeで分離なんて簡単にはいかない >>48 してないっす >>49 Webで現実的な問題はやっぱり時間 金銭的なコストというよりも時間のコストが 惜しいケースが多い (もちろんそれが金銭的なコストにも 繋がってくるのはそうなのだろうけど) PHPは大規模なwebアプリにも通用するとは思うけど 確かにフレームワーク的なものは発展中 だからこそPEARがその役割を担っていくと考えてる PHP5ではよりPEARの役目は大きくなると思う >>50 PHPで大規模システムって無謀だと思う。 >>49 commandパターンで実装 >>50 モノにもよるんじゃない パフォーマンスも求められるものはキツいかもしれないが ただ単に規模だけが大きいんなら PHPでも十分メンテナンスしやすい 再利用性そこそこのもんはちゃんと作れると思う >>52 commandパターンがどう使えるのかぜんぜんわかんね >>46 リファクタリングの目的はパフォーマンスを多少犠牲にしても メンテしやすいコードを作ることだよ。 >>53 じゃあ使わんでいいよ、それだけのもんだ なんで使えるのかなんで使うと得するのか 調べるコストをかけれないなら 最初から使わないのも選択のひとつ >>56 ああもちろんだ 俺も別に完全になんか理解してるわけない つーか何しようとしてるか知らんが その>>49 のmode毎にたいそうな処理が あるならともかくどうせおまえらの事だから 書き込みか確認かとかそんなだろ なら>>6 で別にいいよ command毎にクラス作って別々の実装のコード書いて 呼び出しが $com->exec(〜) に一見なったところで >>6 がダサいからと単純に割り切るような奴が 中身実装しても良くなるとは思えん >>>6 がダサいからと単純に割り切るような奴が中身実装しても良くなるとは思えん この部分には全く根拠がないし、見当外れだな >>6 なが〜い関数無しのスクリプトが見えます・・・。 最近WebProg飽きたからやってないけど、昔はこんな感じに組んでたよ。 勝手にSDM-VCモデルとか呼んでたけど。 後から調べたら似たような思想の設計法とかやたらとあってちょっと欝。 S:ストレージ ファイルとかDBとかを同じメソッドでアクセスできるようにするためのラッパクラス。 三層スキーマの内部スキーマ相当でODBCとかと似たような概念。 ここをモジュール化することで次回から使い回しが可能。 D:データ ストレージに保存するエンティティ(データ)クラス。 同概念スキーマ相当。JDBC的な考え方。 Sを差し替えるだけで様々な媒体に永続化が可能なため移植が楽に。 M:モデル 言うまでもなく、MVCのM。 ビューに依存しないロジックを提供する。 VC:ビュー&コントローラ リストボックスとか汎用的な部品だとVとCの分離には激しく意味があると思うが オーダ特化のVはむしろCと一緒に管理した方が便利という判断でいっしょこたんに。 マンマシンインターフェースを担当する。 >>60 おれもそういう経験あるよ。 有名なモデリングパターンや、デザインパターンを知らかったとき、 もっと効率良く開発したいと心掛けながら、設計していたら、 結局有名なパターンと同じ方法で設計してた。 >61 質問いいかな? MVCとかってパターンランゲージの用語で言う「パターン」に含まれるの? モデリング・パターンのパターンとか?MVCにもパターンの様なもの (どういった時にMVCで設計するといい。とか)の記述がある? 自分のデザインパターンに対する認識が他の人とは違ってるよーな気がしてきた。 「パターン」のコンテキストやフォース(どういった時にそのパターンを適応するといい。 等といったパターンの目的や背景やその制約)の部分が抜けてる様な気がするんだけど。 >>63 >>6 をパターンとかほざいてるんだからなんでもありっしょ。 >>46-47 いや、>>38 でデザパの勉強になるといわれての>>44 では? 俺も好きになれない。 よく使いたいと思うものに無駄が多いように見えるから。AuthしかりDBしかり。 sql作るのは Builder & Directorでやって欲しいし、 CREATE 〜なんて AdaptorやDecoratorでいい。 メソッドの中にベタ書きだし、クエリ発行関数はあちこちに散らばってるし。 詳しいわけじゃないけど、これがデザインパターンといわれるとなんか抵抗あるわけですよ。 それでもPEARスレはのぞいちゃうんだけどね。 無駄が多いんだけならいいんだよ。その分汎用性が高くなってるわけだし。 でもダサいコードが多いじゃん。あれなら Perl で CPAN の方が(゚Д゚)ウマー >「パターン」のコンテキストやフォース(どういった時にそのパターンを適応するといい。 >等といったパターンの目的や背景やその制約)の部分が抜けてる様な気がするんだけど。 それは、多くの経験の集約から「このパターンはこのケースに使える」というのが出てくるのであって、 今は「こういうパターンがあるんじゃね?」って段階だろ。このスレ的には >>60 いわゆるDAOとValueObjectですね。 Javaだとそのあたりを担ってくれるフレームワークも多いけど、 PHPなんかだとこれからの分野なのかな。 >>65 成程ちょっと納得 じゃあデザパの勉強として DBのリファクタリングにチャレンジしてみる >>47 >「分散しましょう!サバ増やしましょう!お任せ下さい!」ってな感じで対応。 「しんどい」仕事をふやさんでも・・・。 >>69 リファクタリングとチューンナップを一緒こたんにしてないか? リファクタリングって再利用しやすいようにメソッド名を適切に書き換えたりするくらいじゃないの? ロジックを変更すればそれに影響するすべての部分に再試験が必要になるわけで それって非常に効率が悪いわけで。 それをやらずにごにょごにょ言ってるなら非常に危険なソフトウェアがちまたにあふれることになるかと。 >67 パターンランゲージってそういった経験を文書化するものじゃなかったっけ? >PHP/DesignPattern horde の人とかデザインパターンを結構意識して使っている様だよ。 PEARだったらLog関連のクラスがGoF適用例として参考になると思う。 >>72 いやもっとあるよ。オレは詳しくはないけどね。 もちろんリファクタリングするにはテストファーストが重要だから。 それがなけりゃダメ。 >>76 ずばり!システムデザインのパターンです。 デザインパターン≒下絵 ?→?→? ↓ ↑ ↑ ?→?←? おすすめの書籍を教えてよ。 リファクタリング+デザインパターンもの? 昔Observerを使ったMVCを知って、 『こりゃいいや!』ってWebプログラムで使おうとして かえってごちゃごちゃになった。 あ、本題書き忘れた。 Compositeパターンはツリー型掲示板なんかにうってつけじゃないの? >>86 そうですか? なんかただの木構造と混同してないか? >>87 ん?……あ、そうか。 スレッド(トピック?)の下にスレッドがあるような再起構造じゃないや。 でも、子記事を持つものをComposite、持たないものをLeafと見立てて 使えないかな? それとも俺何か勘違いしてるかな? >>87 木構造を表現するのに適切なデザインパターンだと思うけど?> Composite pattern >>79 ,81 パターン言語には、その(solution)解法を適用する場合のコンテキスト (背景・解決する問題の状況)や、force(制約・制限)等が書かれているはず。 更に言えば、具体的な事例や、そのパターンを適用した際に起こる副作用とかトレードオフ等、 こういった一連の状況を指してパターンと呼んでいるんじゃなかった? solutionの部分だけを指してパターンと呼んでいる人が多い様に見受けられる。 FAQにもパターンという表現は誤解を招きやすい言葉だったって書かれているけどね。 だからと言って誤解されたままでは有益な議論は出来ないよ。 一言で説明するのは難しいかも知れないけど、設計と言い切ってしまうのはどうかな?と思う。 デザインパターン => オブジェクト指向での設計上の問題に対する解決策とそれに関する知見。 >>85 かえってごちゃごちゃになったのなら、どうしてそうなったのか考えてみよう?何か原因あるはずだよね? ここで、パターン使ってこうなったからパターンは使えない、なんて短絡的な発想はせずに。 どうすれば、その問題をスマートに解決出来るんだろうと考えてみる。 例えば、Observerパターンで知られている問題点は、 Subjectが複数になった場合に保守や拡張が困難になる、その場合はSubjectに中間層を設けるなど。 パターンの説明には必ず関連するパターンへの参照や、例外/制限事項等が書かれているはずです。 クラス図だけ見真似てデザインパターンを使ったつもりに浸っていると、 パターン使った=>更に悪化 という*パターン(繰返しの意味で)*に陥りやすいです。 >>89 めんどいから要約してくれ。3行位に。大体それくらいの情報量だろ? >>90 >>89 を要約すると「お前らもっと勉強しろ、俺はこれだけ物知りだ」になります >>89 ああ、ごめん、言葉が足りなかった。 >>85 は Observerを使ったMVCはGUIなソフトとかには使えるけど Webアプリケーションなんかには向かないぞ、気をつけろー。 Webアプリケーション用のMVCはJ2EEとかを参考にしろー。 って意味だったんです。 CGIはGoF的なデザインパターン使って作っても オブジェクト生成して一回で捨てちゃうもんな こんな100レス近くも語ってて 結局>>6 を改善することはできないんですか? >>94 再利用できる要素はいっぱいあるんだけどな。 ファイル操作とか毎回組んでも面倒くさいしバグの入り込む余地があるしろくな事がないと思うよ。 >>95 >>6 みたいなのが良いとは思ってないが、 >>6 の代行になる優れたコードがあったとしても 結局>>6 レベルくらいで求められる規模のwebAPPの場合 実際のところ>>6 が一番速く書けて一番シンプルで 一番速く動くコードだったりしちゃわないか >>96 ファイル周りで、こういう処理にはこういうパターンがいいよ、みたいのある? 趣味でCGIスクリプト作ってるけど結局ファイル入出力が処理の中心で、 ここをシンプルに書ければだいぶ綺麗になるんだけどなぁ。 >>99 >>60 後、今、RubyとXML使って汎用的なCGI向きなファイルシステム書いてます。 だれか >ファイルとかDBとかを同じメソッドで >アクセスできるようにするためのラッパクラス。 これ作ってください。 > だれか > >ファイルとかDBとかを同じメソッドで > >アクセスできるようにするためのラッパクラス。 > これ作ってください。 Perl の DBI に当たるクラスって Ruby には無いの? >>102 アルみたいですな。知らなんだ。 ちょっと興味があるんですが、データをCSVとかXMLに落としてくれるドライバって存在するんですか? PHP、言語として機能が足りてないからデザパタに向いてないよ。 典型的な例が Singleton。 $a = NULL; function GetSameObject(){ global $a; if($a == NULL){ $a = new SameObject(); } return $a; } >>108 だから、そういう小汚いコード書かなきゃイカンから言語として機能が足りてないんだろ。 PHP5 だと static あるから Singleton は書けるようになるが…それでもどうかと思う。 >>109 PEAR パッケージでよく使われてますが、 PHP4 でも普通に書けますよ。 class Hoge { function &singleton() { static $instance; if (!isset($instance)) { $instance = new Hoge; // $instance = HogeHoge::factory; } return $instance; } $instance = &Hoge::singleton(); >>110 >>109 の言う「小汚い」部類じゃないかね、そのコードは。 クラス内唯一のインスタンスなんだから、論理的に言えばクラスが static 変数として持つべきだろう。 > PHP5 だと static あるから Singleton は書けるようになるが と言っている時点で >>109 の言いたい事は自明だと思うんだが…。あんた大丈夫か? PEAR のコードや Do You PHP にあるデザインパターンのサンプルでも良く見掛けるが、 PHP4 自体の機能が足りずに他の言語ではしなくていいような事をしている点がいくつもある。 少くとも俺は PHP はオススメしない。 >>111 デザパタの本の「はじめに」とか「概要」を読み直すことを推奨。 >>111 てことはCはダメ言語でerronoなんて使ってるunixは目も当てられないって事になるのだろうか。 そんなことだからいつまでもプログラマ + Web特化なんだな。 >>110 クラス・メソッドを使わずnewすると普通に別のインスタンス作成出来るよね? >>115 できますよ。 言語特性や制限はありますが PHP や Perl では Private メソッドも含めてそういう ものは書く側が慣習的に守るというだけのことです。 111 さんがいうようなことも 当然ありますけど、だからといってその言語の利点があるわけですから使い分けるの が良いというだけの話でしょう。 そうだなあ、singleton という、 コンストラクタの実装とクラス変数に大きく依存するパターンは、 PHP の言語仕様とインピーダンスミスマッチが大きい、ということは言えそうに思う。 ただ、GoFパターン全部がそういうわけではなく、 むしろ singleton が例外的だとも言える。 つか、そもそも singleton ってウェブプログラミングで使う? まあ、singleton 以外のパターンも今のところウェブプログラミングでの使い道が あまり見つかってないようではあるが。 しかし、ぱっとすぐ思いつかないが、 singleton 以外でも PHP が向かないパターンはありそうな感じではある。 >>107 への宿題として、 singleton 以外で PHP が向いていないと思われるパターンを提出せよ。 「ウェブプログラミングで使える」というスレの趣旨を満たすとモアベターだが、 さすがにそこまでは難しいか。 >>116 一応、慣習や暗黙の了解みたいなのは理解しています。が、 言語としての機能が足りていない部分という論点に関して言えば、コードの奇麗汚いではなくて singletonパターンの条件を完全に満たす事が出来ない点じゃないかな。と思った。 >>117 例:データベースへ接続するクラスをSingletonにする。 ウェブプログラミングでもアプリケーションサーバ等フレームワークにはよく使われてるよ。 >>117 宿題も糞も、PHP のデザインパターンのサンプルコード読めよ。 その辺の問題点も全部書いてるわ。 まぁ、極論すればグローバル変数をラップしただけという代物だ。 気を付けてグローバル変数を使用するのと早々大差はない。 ,イ │ // |:! //,. -/r‐- 、| ! /,/ ./ | _」 ト、 /.\`/ |二...-┘ ヽ . i ,.>、;/ー- 、 l ! ∠.._;'____\ | ,!イ く二>,.、 <二>`\.、ヽ. /'´レ--‐'ノ. `ー---- 、 |\ ヽ、 \ `l (!" Jfヽ! `''-;ゝ 大佐ではない `‐、jヽ ヾニニ> ゙イ" }_,,. ‐''´ `´\ ー / ,ィ_} . |_ `ー ''´ _」' , ー‐-‐‐‐--''.‐''゛,,;,,...: ゛''-、、,;,, ,ィ'゛ ゛゛""' ゛"'''-、 / ヽ / '、 l l . l i. l l :i. ヽ.:.:...:.:: "' . l .:l ヽ.:.::... "''、 . l. .:l ヽ.:..:. `'、 l ::l: ';.:.:..... ヽ l .:l.:.. .:ィ.):.:. l.:.:.: .:.ヽ、 . l .:l..: ''ー.: .:.:l.:.:..:..:: .:i'゛ >>118 フレームワーク内で使われるのはわかるが DBのコネクションプールはそうやってフレームワークが管理してくれるはずだから ユーザがコード書く段階では気にしなくていいぢゃん。 Perl ですら mod_perl + Apache::DBI 使えばいいし。 と思ったが、よくよく考えてみたら、PHP にはコネクションプールが無いのか。 それは確かに問題だな。 >>122 私の知る限りでは Apache::DBI はコネクションプールをしているわけではな くて PHP の持続的接続と同等の機能を提供するはずです。 つまり DSN 毎にコネクションを維持するだけ (さらにプロセス毎に) だと理 解していますが。 さらにコネクションプールは SQL Relay 等で実現できますよ。 一生懸命読んだけど23の中の一個も理解できませんでした どうしればいいでしょうか。 早くオブジェクト脳になりたいんです! プログラムの改修作業で、既存の動いているクラスを 変更なしに機能を追加したりするときにアダプタっていう デザインパターンを使うのかな?使い方間違ってる? >>129 実は仕事で既に動いているPHPプログラム改修作業をすることに なったのですが、 ・非常に見づらいソース。開発者は既に退社&ドキュメントは無し。 ・納期は短いのでリコーディングすることはできない。 ・動作自体には問題はなく、現在正常に稼動中。 ・機能拡張もあり。 という状況です。ソースが非常に見づらく保守性が著しく低いのと 機能拡張は大幅な仕様変更になるので、できればリコーディングしたい ところなのですが、納期も無いことですし、何より現在問題なく 稼動中なのでそれはできません。 そこでなるべく既存のクラスに手を加えずに、機能拡張をしたい という感じです。 このような場合、既存のクラスを継承させた新しいクラスを作り、 動いている部分は利用しつつ、新規の仕様に合わせた設計に作り変える というやりかたを考えているのですが、これは別にデザインパターンという わけではなくて、ただのOOPの継承を使ってるだけということですかね。 ちなみに、上記のような場合皆さんならどのような手法を取りますか? 識者のご意見をお聞かせいただけたらと思います。 手法云々以前に、そんなDQNな物を担当させられる事になったら 漏れなら先ず上司に現状を報告し、指示を仰ぐな 1.現状のプログラムが如何に問題点の多い物であるか 2.前任者の無能さを叩き、リコーディングの必要性の訴え 3.リコーディングすれば納期に間に合わせる事は難しい。 しかし前任者のプログラムに手を入れた場合、(極端に保守性が悪いので)変更によって障害が起きる可能性が高く、納期が大幅に遅れる危険がある。 以上を伝えて今後の方針を決め、増援を求めるなり何なり対策を協議して・・ (要は、「責任逃れの道はちゃんと作っておけよ」と) >>131 遅レスですが・・・ 非常に勉強になりました。 良スレだと思うんだけど みんなデザインパターンってあまり知らないのか? ムのスレもそうだけで知ってる人ってほんと書かないね まあ、とりあえずJ2EEパターンやPoEAに書かれているパターンは抑えるべきだと思うが。 後者の場合、Webは選択肢の一つに過ぎないけど参考になる。 これらをPHPに適用するとどうなるか考えるのも面白い。 このスレ死んでるのか^^; 既に語り尽くされてしまっているからなぁ。 全然尽くされてないだろ。 http://www.phparch.com/shop_product.php?itemid=96 とりあえずPHP向けの本が出てるから皆買おう。 そうでなきゃ話しも出来ん。 >>147 「ペーパーバック」なら表紙が紙でできた安もんくさい本のことかな。 うわ、今まで ペーパーバッグとペーパーバック間違えてた ビートルズの曲もペーパーバッグライターと思ってた… ペーパーバッグライター の検索結果 約 148 件 よかった他にもたくさんいた… 俺の場合、Singleton、Template Method、Factory Method、 Strategy、あたりを使うねぇ。 PHPだけど、 class array_formatter{ function format_array(&$array){ if(!count($array)) return $this->format_empty(); $html = $this->format_header($array); foreach($array as $key => $value){ $html .= $this->format_item($key, $value); } $html .= $this->format_footer($array); return $html; } function format_empty(){ } function format_header(&$array){ } function format_footer(&$array){ } function format_item($key, $value){ } } こんな感じのクラスを継承して使いまくってる。 >>155 それがデザインパターンと何の関係があるの? http://www.amazon.co.jp/gp/product/4798013188 はじめてのPHP5プログラミング エキスパート編 ワイズノット (著) 価格: ¥ 2,730 (税込) 単行本: 378ページ 出版社: 秀和システム (2006/05) ASIN: 4798013188 目次 オブジェクト指向プログラミング クラスの作成とオブジェクトの操作 PHPのオブジェクト指向のその他の話題 PEAR Smarty ユーザ認証とアクセス制御 セキュリティ エラーと例外処理 Mojavi PDO オークションシステムの作成 データベースアクセスの実装 プログラムの実装 システムの問題点と、改良、拡張方法 Chapter03「PHPのオブジェクト指向のその他の話題」(P60〜76)で、デザインパターンの説明があります。 PHPでデザインパターンを勉強する人は参考になるかな? この課題の意味を日本語に翻訳してくださいw Command パターン、Observer パターン(イベントリスナ)のような、デザインパターン、あ るいは、MVC モデルを利用した、独自のプログラムを設計する。GoF の 23 パターンであれば、どのようなパ ターンを用いてもよい。レポート中には、適用したパターン名、および、適用箇所を明記すること。なお、最低 でも4つ以上の独自のプロトタイプ・オブジェクトを用いてプログラムを設計するものとする。設計内容として、 次の3項目を記述する。 1. デザインパターンによって生みだす特徴を参考に、ソフトウェアのテーマを詳細に記述する。 例: Facebook のようなアドレス帳 例: Twitter のような掲示板 デザインパターンとソフトウェアの機能との関連性を考察し、なぜそのソフトウェが必要で、なぜデザイン パターンを適用したのかを説明する。 2. 設計したソフトウェアについて、プロトタイプ・オブジェクトの一覧と、各プロトタイプ・オブジェクトが 実現する機能、および、各プロトタイプ・オブジェクト間の関係を記述する。なお、全プロトタイプ・オブ ジェクトについて、下記のように、クラスの属性とメソッドがわかるように、ソースコードを添付すること。 >>161 命令形態、観察者形態(出来事聴取者)のような、設計形態、あ るいは、模表制 模型を利用した、独自の計画を設計する。四の団 の 弐拾参 形態であれば、どのような形 態を用いてもよい。論文中には、適用した形態名、および、適用箇所を明記すること。なお、最低 でも四つ以上の独自の原型・物体を用いて計画を設計するものとする。設計内容として、 次の参項目を記述する。 一. 設計形態によって生みだす特徴を参考に、柔軟製品の思想を詳細に記述する。 例: 顔本のような住所帳 例: さえずり のような掲示板 設計形態と柔軟製品の機能との関連性を考察し、なぜその柔軟製が必要で、なぜ設計 形態を適用したのかを説明する。 二. 設計した柔軟製品について、原型・物体の一覧と、各原型・物体が 実現する機能、および、各原型・物体間の関係を記述する。なお、全原型・物 体について、下記のように、部門の属性と手法がわかるように、源符号を添付すること。 >>163 回答ありがとうございます。 「四の団 の 弐拾参 形態」とは何でしょうか? イラストレーターで収入が少ないからと30代後半で漫画家になろうとする、ひきこもりのバカ発見。 足立区に住んでいるそうだ http://inumenken.blog.jp/archives/7002197.html お世話になります。 私、責任者の加茂と申します。以後、宜しくお願い致します。 http://www.apamanshop.com/membersite/27009206/images/kamo.jpg 浪速建設様の見解と致しましては、メールによる対応に関しましては 受付しないということで、当初より返信を行っていないようで、今後につい てもメールや書面での対応は致しかねるというお答えでした。 このように現在まで6通のメールを送られたとのことですが、結果一度も 返信がないとう状況になっています。 私どものほうでも現在までのメール履歴は随時削除を致しております ので実際に11通のメールを頂戴しているか不明なところであります。 弊社としましても今後メールでのやり取りを差し控えたく、浪速建設様 と同行の上でお会いさせていただきたい所存です。 ・ブラックロックシューター http://s-at-e.net/scurl/BRS.html ・ベヨネッタ http://s-at-e.net/scurl/BAYONETTA.html ・風ノ旅ビト http://s-at-e.net/scurl/JOURNEY.html http://s-at-e.net/scurl/kabetokyojinto.html ・2012 http://s-at-e.net/scurl/2012.html ・プロメテウス http://s-at-e.net/scurl/Prometheus.html ・アバター http://s-at-e.net/scurl/Avatar.html 転職の際は要チェック。 下記の条件が全て当てはまる会社にご注意下さい。 ・IT系 in Tokyo ・転職会議で2.5点 ・転職会議の「その他>2ch情報」の欄で過去の2chスレが表示される 誰でも簡単にネットで稼げる方法など 参考までに、 ⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。 グーグル検索⇒『半藤のブブイウイウレレ』 V6XHOPNRFF read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる