【PHP】フレームワークについて語るスレ10【総合】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/08/24(日) 21:43:37ID:???http://pc11.2ch.net/test/read.cgi/php/1202521438/
0587nobodyさん
2008/11/15(土) 09:41:57ID:???インプット・アウトプットの対象の幅広さは、ウェブアプリなんかとは比べものにならんように思う。
ウェブアプリの場合は、一部APIサービス的なものを除けば、ほぼ「画面」相手でいいわけだが。
>>586
その理由でテンプレートエンジンを使いたがらない人も未だに多いがな。同じじゃね?
0588nobodyさん
2008/11/15(土) 13:00:48ID:???つーかFWに組み込まれてるし
0589nobodyさん
2008/11/15(土) 13:15:36ID:???やり方を検討するのが面倒くさいことだけの事が多いと思う。
論理削除ってあるじゃん。レコードに削除フラグを立ててデータは残すって言う。
あのフラグのチェックををいちいち手で (del_flag IS NULL OR del_flag = 0) とか書いている
会社があった。
なぜ NOT NULL制約を付けないのかと聞いたら、「重くなる」って答えが返ってきた。
全力でこけた。いろいろ間違ってる。
0590nobodyさん
2008/11/15(土) 14:11:03ID:???そのテクニックが使われるタイミングを考えると、誤差でしかないとか、
よくあったよね。
むしろコードが読みにくくなったり、書きにくくなったりと、
その時間のほうがもったいないとか。
0591nobodyさん
2008/11/15(土) 14:39:00ID:???たとえば、↓
http://www.sooey.com/journal/2007/05/26/648/
symponyだって。
でもサービスによって違いはあって
http://wakatsukichinatsu.yahoo.co.jp/index.php?itemid=128
↑これなんてPHP?
0592nobodyさん
2008/11/15(土) 14:39:25ID:???0593nobodyさん
2008/11/15(土) 14:54:51ID:???方法がフラグってとこが間抜けってなら少しはわかる気もするが。
0594nobodyさん
2008/11/15(土) 14:55:03ID:???0595nobodyさん
2008/11/15(土) 15:09:50ID:???active enum('Y','N')か、status = 0 なら削除とか?
0597nobodyさん
2008/11/15(土) 16:06:02ID:???0598nobodyさん
2008/11/15(土) 16:34:55ID:???0599nobodyさん
2008/11/15(土) 16:57:52ID:???0601nobodyさん
2008/11/15(土) 17:52:20ID:???0602nobodyさん
2008/11/15(土) 17:55:22ID:???0604nobodyさん
2008/11/15(土) 18:49:10ID:???0606nobodyさん
2008/11/15(土) 19:09:25ID:???0607nobodyさん
2008/11/15(土) 19:12:51ID:???0608nobodyさん
2008/11/15(土) 19:13:24ID:???0609nobodyさん
2008/11/15(土) 19:27:12ID:???削除された、と言う状態がシステム上にありうるならそれはnullで表現すべきじゃない
0610nobodyさん
2008/11/15(土) 19:54:48ID:???全フィールド NOT NULL で作ってしまえと言いたい。
その方が何かとトラブルが少ないし、コーディングも楽だ。
テキストフィールド? 空文字でも入れとけ。 数値? 0が初期値だ。それで都合がわるけりゃ、
-999999999 が初期値だ、文句あるか、ってな感じで。
0612nobodyさん
2008/11/15(土) 23:07:45ID:???そう、カラム名。
id, created(datetime), updated(datetime), deleted(datime)を標準的に使用。
あるいは、statusとしてa)Activei)/Inactive、h)Hidden, b)Obsoleted D)deleted
とか詳しい状態が必要な時に使うとか。
0613595
2008/11/15(土) 23:12:27ID:???皆さん有り難うございます。
0614nobodyさん
2008/11/15(土) 23:21:42ID:???実際問題何も消してないわけなんだし
だから、そういうのは無効化とか不活性化とか利用不可とか、そういう「状態」で呼ぶべきで
削除って言うならならきっちりかっちりまるっと全部消してしまえ!
と思うんだよなー
スレ趣旨と全然関係ないんだけどなー
0616nobodyさん
2008/11/16(日) 02:05:02ID:???警察照会とか、CS対応で必要とかやっぱり要るシーンが多くて>>614みたいに消してしまえーが使えない場合も少なくないよ
>>615
そうだね。
0617nobodyさん
2008/11/16(日) 02:08:47ID:???ソフトウェアなんだから全て論理だし
無効化、凍結、と言う呼び方が正しい
0618nobodyさん
2008/11/16(日) 02:19:28ID:???http://publib.boulder.ibm.com/infocenter/wbihelp/v6rxmx/index.jsp?topic=/com.ibm.wbia_developer.doc/doc/connector_dev_java/java61.htm
0619nobodyさん
2008/11/16(日) 03:13:45ID:???0620nobodyさん
2008/11/16(日) 06:39:55ID:???0621nobodyさん
2008/11/16(日) 06:56:48ID:???呼び方の慣習の問題。
言葉遊びをやってもしょうがないんで、ここでは便宜的に、論理削除とは、
物理的には削除せずにサービス上削除されたようにふるまわせること
でいいかな?
0622nobodyさん
2008/11/16(日) 09:11:01ID:???滔々と語ってるが、>>612の前者のdeleted (削除日時) はまあともかく、
後者の方では、レコードにユニーク制約のカラムがあった時に不便だろ。
削除フラグ(というかカウンタなど)とセットでユニーク制約にしてしまうって
のは、あんまり流行って無いのか?
0623nobodyさん
2008/11/16(日) 12:27:21ID:???0625nobodyさん
2008/11/16(日) 13:00:36ID:???例えばユーザアカウントをユニークにしたいとかで、一意制約をユーザ名カラムに付けるとする。
んで、そのユーザが退会した後、そのデータを残してたら、そのユーザ名がずっと使えない。
それを避けるために、削除データだけ一意制約から考慮外にしたい場合、削除フラグと2カラム連結で
ユニークにしてしまう。
んでレコードを削除する時に、同一なユーザ名を持つデータの削除フラグを、一斉に +1 UPDATEしてしまう。
削除フラグが 1以上なら( というか、0でなければ ) 削除データという扱い。
こんなやり方。マイナーなのかな?と思った。
書いてて思ったが、これ一意制約のカラムが二つ以上あった場合、そのままでは使えないなw
もちょっと応用を利かさないと無理か。
整数部分と少数部分で分けるとか桁で分けるとかビットで分けるとかwww
# DBの一意制約を使わずアプリで常にチェックするなら別にこんなことしなくていいんだけど。
0626nobodyさん
2008/11/16(日) 13:06:04ID:???マイクロ秒まで入れておけばいいのではと後から思ったのは内緒だ。
0627nobodyさん
2008/11/16(日) 13:24:25ID:???飲みながらレスするもんじゃないな。
退散します。
0629nobodyさん
2008/11/16(日) 13:51:02ID:???さて、ユーザーアカウントを例にすると、ちょっと怖すぎるんだが、
CMSなんかのアイテム管理だと、リビジョン管理に同一itemidで
複数のインスタンス、しかも最新以外は非アクティブっていう状態を
表現するという用途があったりする。
その場合、削除フラグを使わずに、使用目的に合わせたタグを振る。
外部キー側もタグやリビジョン番号を考慮した設計にしないといかんわけだけどね。
0630nobodyさん
2008/11/16(日) 14:12:40ID:???そういうのの設計はちょっと知りたいなーと思っていたんだけど、
MediaWikiのソースでも読めばいいのかな?
0631nobodyさん
2008/11/16(日) 14:19:46ID:???リビジョンと直接は関係ないけどソースはしっかりしてるかも
0632nobodyさん
2008/11/16(日) 14:26:24ID:???0633nobodyさん
2008/11/16(日) 14:43:16ID:???0634nobodyさん
2008/11/16(日) 15:05:16ID:???>>587
> インプット・アウトプットの対象の幅広さは、ウェブアプリなんかとは比べものにならんように思う。
> ウェブアプリの場合は、一部APIサービス的なものを除けば、ほぼ「画面」相手でいいわけだが。
それをいったら、ウェブじゃないアプリだって、ほぼ画面(ディスプレイ)相手だろ?
なんか比較している対象がずれてるよ。
画面じゃなくてOffice系の大規模アプリだって、結局は画面にGUI表示してファイルに書き込むだけなんだし。
ゲームだってそう。ハードウェアデバイスを扱うものもあるだろうけど、それをウェブアプリでやってはだめってことはない。
ブラウザでコーヒー沸かす装置とかw
0636nobodyさん
2008/11/16(日) 15:33:36ID:???元のレスが、アプリとは書いてなくて、「ウェブじゃないシステム」って書いてあるからじゃね?
対象がずれてるというか、「Office系の大規模アプリ」とかゲームとかが念頭にあるのは
わかっててわざと書いてるんだろw
車のエンジン制御とか、通信インフラ系とかはシステムじゃねーの?って。
>>585
> それにウェブじゃないシステムが何をしているかというと、
> 結局、ファイルにデータ読み書きして、画面に点を表示しているだけともいえる。
いえねーよw
これがむしろ、言いたいことと表現がずれてるんじゃね?
0637nobodyさん
2008/11/16(日) 17:24:18ID:+7h73lOIスペース区切りでtextカラムに入れて、全文検索するのがシンプルでいいかと思ったのですが、
他にいい方法があったら教えてください
0638nobodyさん
2008/11/16(日) 17:26:45ID:???これはひどい
0639nobodyさん
2008/11/16(日) 17:28:47ID:+7h73lOIhttp://blog.nomadscafe.jp/archives/000643.html
他にいい方法があれば教えてください。
0640nobodyさん
2008/11/16(日) 17:43:46ID:???0641nobodyさん
2008/11/16(日) 17:44:48ID:???タグテーブル作って
アイテムテーブルとの間に多対多のリレーションテーブル持てばいいだけだよね
いかにもリレーショナルに解決出来るケースだと思うけど
0642nobodyさん
2008/11/16(日) 17:45:10ID:???それ、フレームワーク関係ないし、それ以前にPHPの問題でもないよ。
DBの問題だからDB関連スレで質問しろよ。
まぁ、正規化すら理解してないみたいだからまずは本でも買って勉強することをオススメするけどね
0643nobodyさん
2008/11/16(日) 17:52:11ID:???基礎知識が足りてなさそう
0644nobodyさん
2008/11/16(日) 17:59:55ID:???ありがとうございました。
0645nobodyさん
2008/11/16(日) 18:01:45ID:???けど、割とありきたりの機能になったのに、
情報が少なくてベストプラクティスな設計が出来たか不安なんだよね。
タグはパターンとしてどっかに情報がまとまっててもいいと思うんだが。
0646nobodyさん
2008/11/16(日) 18:10:11ID:???それ以外に特別な事なんて無いんだから
0647nobodyさん
2008/11/16(日) 18:20:02ID:???不安ってのはRDBの理解が不十分なのかと。
0648nobodyさん
2008/11/16(日) 18:26:03ID:???0649nobodyさん
2008/11/16(日) 19:46:05ID:???0650nobodyさん
2008/11/16(日) 20:18:46ID:???0651nobodyさん
2008/11/16(日) 20:20:48ID:???0652nobodyさん
2008/11/16(日) 20:23:39ID:???RoRのアプリケーションはRubyで書けるけどSymfonyではRubyで書けない。
これは大きい。それに比べりゃモデル周りなんて大差ないんじゃね?
0653nobodyさん
2008/11/16(日) 20:25:04ID:???フレームワークの比較より言語の比較だし
0654nobodyさん
2008/11/16(日) 21:54:05ID:???0655nobodyさん
2008/11/16(日) 21:56:08ID:???全然違うよ
0657nobodyさん
2008/11/16(日) 22:07:04ID:tiBOVYsk0658nobodyさん
2008/11/16(日) 22:19:55ID:???0659nobodyさん
2008/11/16(日) 22:21:24ID:???それは半分真実
ただWEBフレームワークであるという視点も抜けている
例えば$_POSTや$_COOKIEは関数か?
HTTPヘッダを自動で吐く機能は関数?
PHPはただ単にWEB入出力とDBアクセスに便利な関数群装備のインタプリタとして
使うのもいいし、不十分な(でも拡張も可能な)フレームワークとしても利用出来る
と思ってるけどどうだろ
0660nobodyさん
2008/11/16(日) 23:54:00ID:???0661nobodyさん
2008/11/17(月) 00:16:53ID:???0663nobodyさん
2008/11/17(月) 03:03:18ID:???ワークはあるがフレームがない。
0664nobodyさん
2008/11/17(月) 22:29:41ID:???webプログラミングがまだ試行錯誤だった時代に、
その「便利な関数群」ってだけのことがとても
大きかったから、シェアが取れた。
便利な関数群自体がほとんど無かったからね。
Javaと同じ。
0665nobodyさん
2008/11/18(火) 03:06:59ID:???0666nobodyさん
2008/11/18(火) 03:12:50ID:???あとPHPが流行ったのはWEBアプリ(のインタフェース部分)はこの程度の機能で十分って事もあるだろうね
敷居を低くしてしまって素人プログラマーが流入してきても
WEB分野には受け皿がある
0667nobodyさん
2008/11/18(火) 06:22:10ID:???アホでも書けるんだよ
0668nobodyさん
2008/11/18(火) 10:11:51ID:???関数や機能がたくさんあるだけが問題ならPerlが圧勝したはず。
やっぱりmod_phpの管理のお手軽さとPHPの言語自体の簡便さ。
0669nobodyさん
2008/11/18(火) 10:27:37ID:???ソースインストールはお世辞にもお手軽とは言えなかったがな
未だにrpm以外でのPHP管理を敬遠するサーバ屋もあるくらい
0670nobodyさん
2008/11/18(火) 12:15:39ID:???ここで言うプル型アーキテクチャのフレームワークってPHPでなんかある?
0671nobodyさん
2008/11/18(火) 12:41:48ID:???0672nobodyさん
2008/11/18(火) 13:20:30ID:???Yii Web Programming Frameworkは期待できそう。
http://cakephp.seesaa.net/article/109833179.html
0673nobodyさん
2008/11/18(火) 14:00:58ID:???CPANモジュールをインストールしなければ行けないから、リモートログインとシェルが使えない共用のレンタルサーバなんかだと使い物にならない。
多少なりともUNIXの知識も要求されるし。
その点、PHPの場合、mbstringが有効になってれば、Pearが使えなくてもどうにでもなる。
0674nobodyさん
2008/11/18(火) 14:55:14ID:???それはかなり昔の話だけどね。
PHPで global $HTTP_GET_VARS とかしなきゃいけない、ってのに近いくらいw
特に、Perl5.8からはEncode標準添付だし、MovableTypeの流行以降は、
そこらのレンタルサーバでも一通りのモジュールは入るようになってる。
DBI・DBMやらも普通に使えるのが大半。
その頃にはみんなレンタルサーバでのPerl CGIから離れてしまってたがなw
0678nobodyさん
2008/11/18(火) 20:42:37ID:???そもそも国際版のPHP3ってレンタルサーバで提供されることはほとんどなかった。あっても、すぐに4に移行したから。
Perlの場合、5.8.10になっても標準モジュールだけでは既存のウェブフレームワークは動かない。
モジュールをインストールしても、CatalystみたいなのはCGI環境ではまともな速度が出ないし。
共用レンタルサーバへの設置の難しさがあって、MTがWordPressに抜かれて、XOOPSとかPukiWikiとかフリーのウェブアプリってPHPの一人勝ちになった。
Perlが使われるのは未だにKENTのCGIとか。
そういう反省があって、今のPerl界でMENTAとかの設置の簡単な、標準外のモジュールに依存しないウェブフレームワークが注目されてる。
けど、結局のところ、ベストプラクティスに載ってるようなモダンなPerlを書こうと思えば、適時CPANモジュールをインストールするしかないわけで、これはPerlっていう言語の性格上どうにもならないな。
0679nobodyさん
2008/11/18(火) 20:49:25ID:???ビューがコントローラーにデータをリクエストする。を読むと、
すごいイベント駆動ぽい気がするんだけど・・・
プル型というのは、いったい何のための仕組みなんだ?
コントローラーがビューにデータを渡すのではなく、
あえてビューがコントローラーにデータをリクエストする理由が知りたい。
0680nobodyさん
2008/11/18(火) 21:21:31ID:???オンデマンドに必要なデータを拾いに行くので、自由度が高くなる。
ページに組み込むパーツがいかように変化してもコントローラーを
いじらなくて済むところとか。
まぁ、プッシュ型でも、ビューからコントローラーを呼べるはず。
それが特殊な時だけ利用するのか、常にそうするのかの違いだな。
CMSでイベント駆動だとプル型っぽい動きさせてるのが結構ある。
フレームワークはなんだかんだボトムアップだからプッシュ型が普通で、
それに慣れすぎてる感はある。
0681nobodyさん
2008/11/18(火) 22:15:34ID:???なんかフレームワークスレっぽくなってきた
0682nobodyさん
2008/11/18(火) 22:23:17ID:???0683nobodyさん
2008/11/18(火) 22:54:01ID:???PHPだと複数ファイルに分けてあるものをIncludeしてくしかないわけで、
MVCはコード書く上での概念みたいな感じでPushもPullも厳密には関係ないよね?
JavaServletのforwardみたいに処理投げ渡したりとかできないよね
0684nobodyさん
2008/11/18(火) 23:09:54ID:???0685nobodyさん
2008/11/18(火) 23:29:54ID:???Tapestryではこんな説明だった。
> Apache Tapestryは、アクションをベースとした仕組みのApache Strutsとは競合する。
> TapestryはStrutsとは違い、コンポーネントベースであり、コード量が少なくて済む点が特徴である。
> またStrutsのようにJSPカスタムタグライブラリを覚えなおす必要がなく、
> 必ずServlet/JSPを作成しなければならないということはなく、
> Javaやネットワークの知識がないウェブデザイナーでも簡単にJava製ウェブアプリケーションを作成できるという利点がある。
アクションをベースとしたStrutsとは違うというあたりが、
なんとなくプル型が分かるような分からないような。
使ってみないと、はっきりしないかなー
0686nobodyさん
2008/11/19(水) 00:16:11ID:???これ見たらpush/pullが一目瞭然。
■ このスレッドは過去ログ倉庫に格納されています