トップページ⇒php
165コメント61KB

ウェブプログラミングで使えるデザインパターン

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/11/22 06:56ID:Lh+gL3bz
ゲッチューポン
0105nobodyさん04/01/03 11:48ID:2WhaiS3p
Bridgeパターン
http://www.lyricfathom.com/pukiwiki/pukiwiki.php?Web%A5%A2%A5%D7%A5%EA%A5%B1%A1%BC%A5%B7%A5%E7%A5%F3%A4%C7%A4%CEBridge%A5%D1%A5%BF%A1%BC%A5%F3
0106nobodyさん04/01/03 14:16ID:/y0BIE8s
PHPのパターンならここが有名でしょうね。
http://www.phppatterns.com/
0107nobodyさん04/01/05 19:45ID:???
PHP、言語として機能が足りてないからデザパタに向いてないよ。
典型的な例が Singleton。
0108nobodyさん04/01/05 20:23ID:???

$a = NULL;

function GetSameObject(){
global $a;

if($a == NULL){
$a = new SameObject();
}

return $a;
}
0109nobodyさん04/01/07 09:41ID:???
>>108
だから、そういう小汚いコード書かなきゃイカンから言語として機能が足りてないんだろ。
PHP5 だと static あるから Singleton は書けるようになるが…それでもどうかと思う。
0110nobodyさん04/01/07 18:00ID:???
>>109
PEAR パッケージでよく使われてますが、 PHP4 でも普通に書けますよ。

class Hoge
{
function &singleton()
{
static $instance;
if (!isset($instance)) {
$instance = new Hoge;
// $instance = HogeHoge::factory;
}

return $instance;
}

$instance = &Hoge::singleton();
011110704/01/08 05:49ID:???
>>110
>>109 の言う「小汚い」部類じゃないかね、そのコードは。
クラス内唯一のインスタンスなんだから、論理的に言えばクラスが static 変数として持つべきだろう。
> PHP5 だと static あるから Singleton は書けるようになるが
と言っている時点で >>109 の言いたい事は自明だと思うんだが…。あんた大丈夫か?

PEAR のコードや Do You PHP にあるデザインパターンのサンプルでも良く見掛けるが、
PHP4 自体の機能が足りずに他の言語ではしなくていいような事をしている点がいくつもある。
少くとも俺は PHP はオススメしない。
0112nobodyさん04/01/08 06:38ID:???
>>111
デザパタの本の「はじめに」とか「概要」を読み直すことを推奨。

0113nobodyさん04/01/08 06:44ID:???
>>111
てことはCはダメ言語でerronoなんて使ってるunixは目も当てられないって事になるのだろうか。
そんなことだからいつまでもプログラマ + Web特化なんだな。
0114nobodyさん04/01/08 06:47ID:???
まぁ C はダメ言語だろうな。
0115nobodyさん04/01/08 08:32ID:???
>>110
クラス・メソッドを使わずnewすると普通に別のインスタンス作成出来るよね?
011611004/01/08 09:17ID:???
>>115
できますよ。
言語特性や制限はありますが PHP や Perl では Private メソッドも含めてそういう
ものは書く側が慣習的に守るというだけのことです。 111 さんがいうようなことも
当然ありますけど、だからといってその言語の利点があるわけですから使い分けるの
が良いというだけの話でしょう。
0117nobodyさん04/01/08 14:14ID:???
そうだなあ、singleton という、
コンストラクタの実装とクラス変数に大きく依存するパターンは、
PHP の言語仕様とインピーダンスミスマッチが大きい、ということは言えそうに思う。

ただ、GoFパターン全部がそういうわけではなく、
むしろ singleton が例外的だとも言える。

つか、そもそも singleton ってウェブプログラミングで使う?
まあ、singleton 以外のパターンも今のところウェブプログラミングでの使い道が
あまり見つかってないようではあるが。

しかし、ぱっとすぐ思いつかないが、
singleton 以外でも PHP が向かないパターンはありそうな感じではある。

>>107 への宿題として、
singleton 以外で PHP が向いていないと思われるパターンを提出せよ。
「ウェブプログラミングで使える」というスレの趣旨を満たすとモアベターだが、
さすがにそこまでは難しいか。
0118nobodyさん04/01/08 20:51ID:???
>>116
一応、慣習や暗黙の了解みたいなのは理解しています。が、
言語としての機能が足りていない部分という論点に関して言えば、コードの奇麗汚いではなくて
singletonパターンの条件を完全に満たす事が出来ない点じゃないかな。と思った。

>>117
例:データベースへ接続するクラスをSingletonにする。
ウェブプログラミングでもアプリケーションサーバ等フレームワークにはよく使われてるよ。
011910704/01/08 23:07ID:???
>>117
宿題も糞も、PHP のデザインパターンのサンプルコード読めよ。
その辺の問題点も全部書いてるわ。
0120nobodyさん04/01/08 23:24ID:???
まぁ、極論すればグローバル変数をラップしただけという代物だ。
気を付けてグローバル変数を使用するのと早々大差はない。
0121nobodyさん04/01/09 07:36ID:???
                       ,イ    │
                    //      |:!
                      //,. -/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'゛

0122nobodyさん04/01/09 10:45ID:???
>>118
フレームワーク内で使われるのはわかるが
DBのコネクションプールはそうやってフレームワークが管理してくれるはずだから
ユーザがコード書く段階では気にしなくていいぢゃん。
Perl ですら mod_perl + Apache::DBI 使えばいいし。

と思ったが、よくよく考えてみたら、PHP にはコネクションプールが無いのか。
それは確かに問題だな。
012311004/01/09 11:34ID:???
>>122
私の知る限りでは Apache::DBI はコネクションプールをしているわけではな
くて PHP の持続的接続と同等の機能を提供するはずです。
つまり DSN 毎にコネクションを維持するだけ (さらにプロセス毎に) だと理
解していますが。

さらにコネクションプールは SQL Relay 等で実現できますよ。
0124nobodyさん05/01/27 00:47:17ID:???
一生懸命読んだけど23の中の一個も理解できませんでした
どうしればいいでしょうか。
早くオブジェクト脳になりたいんです!
0125nobodyさん05/01/27 08:39:42ID:???
>>124
オブジェクト指向を学ぶ
0126nobodyさん2005/04/03(日) 21:00:04ID:???
保守
0127nobodyさん2005/04/24(日) 12:25:02ID:???
PHP5だとデザインパターンも生きてくるのかな?
0128nobodyさん2005/05/02(月) 21:38:03ID:M34Qp7Tn
プログラムの改修作業で、既存の動いているクラスを
変更なしに機能を追加したりするときにアダプタっていう
デザインパターンを使うのかな?使い方間違ってる?
0129nobodyさん2005/05/02(月) 22:18:31ID:???
こっちで聞いた方が詳しく教えてくれると思うが、既存のクラスの機能を拡張するなら違うと思うぞ。
http://pc8.2ch.net/test/read.cgi/tech/1095388499/

0130nobodyさん2005/05/03(火) 22:22:38ID:???
>>129
実は仕事で既に動いているPHPプログラム改修作業をすることに
なったのですが、

・非常に見づらいソース。開発者は既に退社&ドキュメントは無し。
・納期は短いのでリコーディングすることはできない。
・動作自体には問題はなく、現在正常に稼動中。
・機能拡張もあり。

という状況です。ソースが非常に見づらく保守性が著しく低いのと
機能拡張は大幅な仕様変更になるので、できればリコーディングしたい
ところなのですが、納期も無いことですし、何より現在問題なく
稼動中なのでそれはできません。

そこでなるべく既存のクラスに手を加えずに、機能拡張をしたい
という感じです。
このような場合、既存のクラスを継承させた新しいクラスを作り、
動いている部分は利用しつつ、新規の仕様に合わせた設計に作り変える
というやりかたを考えているのですが、これは別にデザインパターンという
わけではなくて、ただのOOPの継承を使ってるだけということですかね。

ちなみに、上記のような場合皆さんならどのような手法を取りますか?
識者のご意見をお聞かせいただけたらと思います。
0131nobodyさん2005/05/05(木) 23:01:05ID:???
手法云々以前に、そんなDQNな物を担当させられる事になったら
漏れなら先ず上司に現状を報告し、指示を仰ぐな

1.現状のプログラムが如何に問題点の多い物であるか
2.前任者の無能さを叩き、リコーディングの必要性の訴え
3.リコーディングすれば納期に間に合わせる事は難しい。
 しかし前任者のプログラムに手を入れた場合、(極端に保守性が悪いので)変更によって障害が起きる可能性が高く、納期が大幅に遅れる危険がある。

以上を伝えて今後の方針を決め、増援を求めるなり何なり対策を協議して・・
(要は、「責任逃れの道はちゃんと作っておけよ」と)
01321302005/05/20(金) 00:05:10ID:???
>>131
遅レスですが・・・
非常に勉強になりました。
0133nobodyさん2005/05/28(土) 13:42:10ID:???
保守
0134nobodyさん2005/06/11(土) 13:52:15ID:???
PHPでデザインパターン使ってる?
0135nobodyさん2005/06/23(木) 01:29:49ID:l0fPbzln
http://www002.upp.so-net.ne.jp/ys_oota/mdp/Adapter/index.htm

>>6のかわりってこれでいいんじゃね?
0136nobodyさん2005/07/14(木) 05:02:59ID:Dw3R1Zsm
良スレだと思うんだけど
みんなデザインパターンってあまり知らないのか?
0137nobodyさん2005/07/14(木) 05:09:10ID:???
ムのスレもそうだけで知ってる人ってほんと書かないね
0138nobodyさん2005/07/14(木) 05:35:55ID:???
このスレはお題があれば再生するんじゃないの。
0139nobodyさん2005/07/14(木) 20:33:00ID:???
良スレだと思うんだけどな。
0140nobodyさん2005/07/14(木) 21:17:21ID:???
待ったり進行でいいんジャマイカ?
0141nobodyさん2005/08/09(火) 19:13:09ID:1DO6YyCD
まあ、とりあえずJ2EEパターンやPoEAに書かれているパターンは抑えるべきだと思うが。
後者の場合、Webは選択肢の一つに過ぎないけど参考になる。
これらをPHPに適用するとどうなるか考えるのも面白い。
0142nobodyさん2005/09/02(金) 22:29:06ID:???
このスレ死んでるのか^^; 既に語り尽くされてしまっているからなぁ。
0143nobodyさん2005/09/08(木) 20:14:04ID:UAazRTeh
全然尽くされてないだろ。
http://www.phparch.com/shop_product.php?itemid=96
とりあえずPHP向けの本が出てるから皆買おう。
そうでなきゃ話しも出来ん。
0144nobodyさん2005/09/09(金) 01:34:49ID:???
PHP向けのは要らない
0145nobodyさん2005/09/13(火) 13:39:23ID:???
>>143
ペーパーバッグなのにやたら高いね
0146nobodyさん2005/09/19(月) 05:28:58ID:???
>>145
> ペーパーバッグ

紙袋?
0147nobodyさん2005/09/19(月) 10:34:02ID:???
ペーパーバックって何よw
0148nobodyさん2005/09/19(月) 11:32:36ID:???
>>147
「ペーパーバック」なら表紙が紙でできた安もんくさい本のことかな。
0149nobodyさん2005/09/20(火) 02:45:05ID:???
うわ、今まで
ペーパーバッグとペーパーバック間違えてた
ビートルズの曲もペーパーバッグライターと思ってた…
0150nobodyさん2005/09/20(火) 02:46:20ID:???
ペーパーバッグライター の検索結果 約 148 件

よかった他にもたくさんいた…
0151nobodyさん2006/01/19(木) 19:25:49ID:tf3J2l5I
俺の場合、Singleton、Template Method、Factory Method、
Strategy、あたりを使うねぇ。
0152nobodyさん2006/01/20(金) 08:07:06ID:???
でたこのパターーーーーーーーーン
0153nobodyさん2006/01/20(金) 09:25:32ID:???
でたこ
0154nobodyさん2006/01/20(金) 09:48:05ID:???
でたこタンハァハァ
0155nobodyさん2006/01/20(金) 13:38:24ID:???
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){
    }
}

こんな感じのクラスを継承して使いまくってる。
0156nobodyさん2006/01/25(水) 17:02:55ID:thETe4Qv
>>155
それがデザインパターンと何の関係があるの?
0157nobodyさん2006/01/28(土) 21:15:46ID:???
パターンだろ。
0158nobodyさん2006/01/30(月) 22:36:27ID:???
Template Method?
0159nobodyさん2006/09/27(水) 12:34:29ID:???
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でデザインパターンを勉強する人は参考になるかな?
0160nobodyさん2010/06/02(水) 21:28:21ID:???
4年ぶりに記念カキコ。
0161nobodyさん2012/05/25(金) 13:18:41.79ID:/0EJtfhp
この課題の意味を日本語に翻訳してくださいw

Command パターン、Observer パターン(イベントリスナ)のような、デザインパターン、あ
るいは、MVC モデルを利用した、独自のプログラムを設計する。GoF の 23 パターンであれば、どのようなパ
ターンを用いてもよい。レポート中には、適用したパターン名、および、適用箇所を明記すること。なお、最低
でも4つ以上の独自のプロトタイプ・オブジェクトを用いてプログラムを設計するものとする。設計内容として、
次の3項目を記述する。
1. デザインパターンによって生みだす特徴を参考に、ソフトウェアのテーマを詳細に記述する。
例: Facebook のようなアドレス帳
例: Twitter のような掲示板
デザインパターンとソフトウェアの機能との関連性を考察し、なぜそのソフトウェが必要で、なぜデザイン
パターンを適用したのかを説明する。
2. 設計したソフトウェアについて、プロトタイプ・オブジェクトの一覧と、各プロトタイプ・オブジェクトが
実現する機能、および、各プロトタイプ・オブジェクト間の関係を記述する。なお、全プロトタイプ・オブ
ジェクトについて、下記のように、クラスの属性とメソッドがわかるように、ソースコードを添付すること。
0162nobodyさん2012/05/27(日) 11:21:33.31ID:I9XKNPOE
 
 
0163nobodyさん2012/05/27(日) 22:35:05.32ID:pPYyk92v
>>161
命令形態、観察者形態(出来事聴取者)のような、設計形態、あ
るいは、模表制 模型を利用した、独自の計画を設計する。四の団 の 弐拾参 形態であれば、どのような形
態を用いてもよい。論文中には、適用した形態名、および、適用箇所を明記すること。なお、最低
でも四つ以上の独自の原型・物体を用いて計画を設計するものとする。設計内容として、
次の参項目を記述する。
一. 設計形態によって生みだす特徴を参考に、柔軟製品の思想を詳細に記述する。
例: 顔本のような住所帳
例: さえずり のような掲示板
設計形態と柔軟製品の機能との関連性を考察し、なぜその柔軟製が必要で、なぜ設計
形態を適用したのかを説明する。
二. 設計した柔軟製品について、原型・物体の一覧と、各原型・物体が
実現する機能、および、各原型・物体間の関係を記述する。なお、全原型・物
体について、下記のように、部門の属性と手法がわかるように、源符号を添付すること。
01641612012/05/28(月) 16:57:47.92ID:???
>>163
回答ありがとうございます。
「四の団 の 弐拾参 形態」とは何でしょうか?
0165電脳プリオン!ninja 【17m】 2014/05/06(火) 23:27:44.25ID:???
もうネタ切れか
■ このスレッドは過去ログ倉庫に格納されています