【PHP】フレームワーク CakePHP 3ホール目【本命】at PHP
【PHP】フレームワーク CakePHP 3ホール目【本命】 - 暇つぶし2ch232:nobodyさん
08/03/20 13:47:58
>>230
よくわからんが、いまどき生産性の悪いほうを
選びたいのか?

233:nobodyさん
08/03/20 13:49:21
負荷が高いシステムを作っているところは
どこでもフレームワークを使っている。

234:nobodyさん
08/03/20 13:50:32
>>229

View側で
$paginator->prev()
$paginator->next()

の第2引数に絞り込み条件を配列で入れてやら無いと
URLの後ろにパラメーターが付加されてなくない?

URLリンク(localhost)
みたいなかんじ

235:nobodyさん
08/03/20 13:55:14
>>234
いまソースが手元に無くて忘れたが、CakePHP1.2でかなり改善された。
そういえば、そういうパラメータを”コントローラ”側で追加していたきもする。
コントローラーのpagination変数だったっけ?
pagination[モデル名]だっけ?
まあわすれた。

236:nobodyさん
08/03/20 13:55:53
>>233
どちらかと言うと、「負荷が高いシステム」と言うより、
「大規模なシステム」はフレームワークを使ってるという感じじゃない?

そうしないと、コーディングや保守が大変だもんなあ。

237:nobodyさん
08/03/20 14:03:35
結局は、昔からある速度重視でアセンブラ(生PHP)で書くか、
生産性重視で高級言語(フレームワーク)で書くかの話でしかないな

238:nobodyさん
08/03/20 14:07:42
小規模フレームワークはCIが一番だと思うんだよね
CakePHPは小規模フレームワークのクセにsymfonyと同レベルくらい負荷かかりすぎ


239:nobodyさん
08/03/20 14:12:16
>>238
宿題。

それをデータで示してください。

つーか、何をもって小規模といっているのかわからん。

240:nobodyさん
08/03/20 14:15:07
機能が少ないほうが早い。 機能と速度どっちをとるかだ。

241:nobodyさん
08/03/20 14:15:17
>>239
10万stepまで 小規模
データは「CakePHP CodeIgniter ベンチマーク」でググれ

242:nobodyさん
08/03/20 14:18:04
>>239
URLリンク(www.tsujita.jp)


243:nobodyさん
08/03/20 14:20:54
だめだな。CodeIgniter は小規模でしか使えない。
一番重要なモデルが貧弱すぎる。中規模以上ならCakePHPだな。
URLリンク(blogs.atanaka.biz)

・フレームワークにありがちな、あまり使わない機能が削がれている
・フレームワークにありがちな、よく使う機能もけっこう削がれている。
・だから、ステップ数が他のPHPフレームワークと比べて格段に少ない。
・だから、実行速度が速い。(ベンチマークはこちら)
・フレームワーク自体が複雑なことをしようとしていないので、潜在バグの深刻さも小さい。(たぶん)
・マニュアルがかなり読みやすく、取っつきやすい。
・cakePHPには名前のインパクトには負ける。
・ZendFramework には格式の高さで負ける。
・MVCというよりは、VCだ。モデルはあくまでもおまけ的。
・PHPがそもそもテンプレート的なんだからテンプレートエンジンいらない、と考えているふしあり。(だから速い、と)
・でも、簡単な変数置き換えの簡易テンプレートはデフォルトでついてるし、Smartyとの連携もできる。

244:nobodyさん
08/03/20 14:22:14
流行らないフレームワーク。そっちで盛り上げてくださいw

[PHP][フレームワーク]CodeIgniterスレ
スレリンク(php板)

245:nobodyさん
08/03/20 14:25:59
>>243
モデルはCIベースでオレオレ的に拡張した方がいい。
CakePHPの既存モデルにしっくり来ないから
まずコードが凄く見難い状態になる
結局バリデートにYAML使ったりと拡張しないいけない

246:nobodyさん
08/03/20 14:27:28
小規模 CodeIgniter
中規模 CakePHP
大規模 Symfony

これでいいじゃん

247:nobodyさん
08/03/20 14:29:19
小規模 CI
中規模 CI
大規模 ここまできたらCIでいいや

248:nobodyさん
08/03/20 14:31:12
CIのサクサク感を味わうと他のFWは使えない

249:nobodyさん
08/03/20 14:36:26
>>225
それバージョンいくつ?

250:nobodyさん
08/03/20 14:36:52
viewの先頭でoptions()を使って追加文字列をセットしておけば、prev()やsort()等で追加の指定する必要なくなる
$paginator->options(array('url'=>'hogehoge'))

controllerでpaginate(モデル)した後のoptionsにセットしてもurlに展開される
$this->params['paging'][モデル]['options']['hogeoge_key']='hogeoge_value'
*この方法は裏技的な気がするけど、、、

251:nobodyさん
08/03/20 14:39:31
>>249
1.2ですが?

252:nobodyさん
08/03/20 14:40:57
痛いCI厨は自分のスレを盛り上げてこいよw
わざわざCakePHPスレを盛り上げて乙

253:nobodyさん
08/03/20 14:46:46
経験から言うと、どんなものでも「軽い!」という触れ込みでデビューしたものは、
最初は機能が少なくて、バージョンがあがるにつれて機能が追加され最終的には重くなるんだよな。
で、ほかと同等の機能を備えたときには、ほかと同等の重さになっている。

254:nobodyさん
08/03/20 15:00:55
CIスレですが、今週の日曜以降、書き込みがありません。
使ってる方、どうぞ書き込んで下さい。

スレリンク(php板)l50

255:nobodyさん
08/03/20 15:11:51
akelosスレなんてもっと(ry

256:nobodyさん
08/03/20 15:33:39
>>251
hasManyアソシエーションでlimitを指定しないと確かに225のクエリになる。
ソース読んだらそのためのif文があった。これは知らなかった。サンクス

limit指定しないのが普通なのか・・・あと、なんでそういう実装にしてるんだろう。
limitでUserの件数絞るとしてもwhere user_id (1,3,5)はできると思うのだが。

257:nobodyさん
08/03/20 15:35:10
間違えた。
> limitでUserの件数絞るとしても
limitでCommentの件数絞るとしても

258:nobodyさん
08/03/20 15:42:11
>>256
>>257
面倒ならカスタムsqlでやれば早いじゃん

259:nobodyさん
08/03/20 15:42:19
んー、Commentに対するlimitがある場合はそう実装するしかないのか。
バカじゃん俺。この振る舞いについてのドキュメントはどっかにあったのかな。
連投スマソ。

260:nobodyさん
08/03/21 01:06:38
Cakeとは関係ないんですが、複数のモデルの処理(全部更新)を1個のトランザクションにするときってどう書いたらいいですか?
コントローラーにこんな感じで書こうと思うのですがどうでしょうか。

start transaction

$resultA = $modelA ->method();

if($resultA == 'error')
{
rollback
return;
}

$resultB = $modelB ->method();

if($resultB == 'error')
{
rollback
return;
}

$resultC = $modelC ->method();

if($resultC == 'error')
{
rollback
return;
}

commit

261:nobodyさん
08/03/21 04:01:36
>>260
スレ違いだと思うんだけど・・・

262:nobodyさん
08/03/21 11:15:08
confirmぺルパー作成完了

263:nobodyさん
08/03/21 11:28:48
ぺルパーについてkwsk

264:nobodyさん
08/03/21 22:38:30
バリデートのyaml化作業開始

265:nobodyさん
08/03/22 02:17:57 rTbTxKR5
コンポーネントの中でモデルって使えるよね、$this->モデル名とかで。
コントローラにはあまり詳細な処理は書きたくない(つまり、大まかな流れだけ)ので、
具体的な処理はコンポーネントをこさえて、そちらで処理したいんだけど考え方あってるかな?
たとえば、会員登録処理をするアプリを例にすると、UserRegisterComponentみたいなのを作って
identify()やregister()、update()といったモデルを扱う処理を記述して、
コントローラーからはフォームの値の受け取りとコンポーネントをコネコネ使うこと、結果によって
ビューを表示しわけるようなイメージです。
ソース書いて晒した方が早い?

266:nobodyさん
08/03/22 03:46:35
>>265
> コントローラにはあまり詳細な処理は書きたくない
> 具体的な処理はコンポーネントをこさえて、そちらで処理したい

大事なのはこれらの明確な理由が何なのかってことだと思う。
その会員登録処理がシステムの他の部分からも必要になるならコンポーネントにした方がいいと思うよ。
もしくは他のアプリでも(ほぼ)そのまま使用できるなら。
あとはコントローラとモデル(DAO層)を分離することでテスタビリティを向上させたいとかかなぁ
例えばテストの時はモックコンポーネント使うようにすればデータベースがなくてもコントローラのテストができる。

267:265
08/03/22 05:08:43 rTbTxKR5
>>266
なるほど。コンポーネントで会員登録処理と思いついた理由は指摘のとおり他のアプリで
いつも同様のことを実装してるのでコンポーネント化してしまおうというのが一番の理由。
それにコントローラ内に細かい条件分岐や処理を書き始めるとものすごくコードが肥大して
メンテナンスがし難いし、もし今後会員登録のフローを同アプリケーションの別箇所でも使い
たいって仕様変更があっても対応しやすいかと。

でも、「会員登録(管理)コンポーネント」なんて作っちゃうとモデルやDBテーブルの構造が
かなり固定化&依存してしまうのがいやだなだ、と…(AuthComponentみたいにね)
それならばpluginにしちゃえば?って考えることもあるけど、pluginってあんまり使われてないし。
うーむ。

268:nobodyさん
08/03/22 10:11:22
>>267
そんな恐ろしいほどにコードが肥大する。かつそれら共通利用する機会が多いなら
コンポーネント化しちゃいなよ

269:nobodyさん
08/03/22 10:19:47
>>267
DBテーブルの構造がかなり固定化&依存

これ内容が会員登録だったらテーブル構造に依存しちゃうのやばいだろ?
会員認証なら固定依存しても、それほど問題ないけど
コンポーネントてそもそもDBテーブルの構造がかなり固定化&依存してしまうものなんだね

270:nobodyさん
08/03/22 10:52:32
>>267
コンポーネント設計のポイントは、Plug-and-Playを可能にすることであり、独立性を高めることにある
重要となる設計要素は、インターフェースであり、注目すべきは設計要素間の依存関係だと思う
内部実装に依存しない形でコラボレーションをモデル化できるインターフェースが重要じゃないかな

コンポーネント化するということは、結局クラスをグループ化することだからね
クラス間の関連(集合-部分、汎化-特化)と依存関係を意識して設計しないと
物理的にはコンポーネント化したが、論理的にはひとつのシステム全体
ひとつの再利用単位として使わざるを得ないという状況が現れるから
この点で、依存関係の設計はかなり重要

271:nobodyさん
08/03/22 11:26:27
>>266
モックコンポーネント

あまり聞かない、組み合わせだけどw
モックとコンポーネント入れ替えするものじゃないの?

272:nobodyさん
08/03/22 11:49:52
モックンがどうかしたって?

273:nobodyさん
08/03/22 19:56:20 rTbTxKR5
ちなみにCakePHPのプラグインを配布してるサイトをご存知ですか?
「配布できる」と書いてあるくせに、プラグイン配布サイトって見たことないやと思って。
「会員登録プラグイン」とかあるといいのになー

会員登録コンポーネントの件、結局ユーザーテーブルを分けて(users:ログインIDとパスワードだけ、user_profiles:その他のプロフィール項目)
コンポーネントで固定化するのはusersテーブルを主にして、user_profilesの方はアプリケーション毎に
自由に定義できるような仕様でコンポーネントを書いてみようかと思っています。

274:nobodyさん
08/03/22 20:52:09
>>271
そういうこと。テストの時はモックを使うようにする。
「コンポーネントのモック」って意味でモックコンポーネントって言った。

275:nobodyさん
08/03/22 21:01:00
>>273
会員登録プラグイン

何度も使うような処理でも無いし面倒な処理でもないからなあ

個人的には確認画面やらページ送りやら何度も使う場面のあるプラグインもしくは
コンポーネントが欲しい


276:nobodyさん
08/03/23 01:31:09
バリデートのyaml化作業完了
yamlの空白に少しはまった

277:nobodyさん
08/03/23 02:03:00
>>276
おつかれっす

278:nobodyさん
08/03/23 12:24:28
findのような感じで、IDを指定してDBデータの更新を
ファンクションはありますか? イメージとしてはこんな感じで。
$this->Post->hogehoge($id, 'Address'->'Hokkaido');


Model classのファンクションを一通り眺めてみたのですが、
それらしきファンクションを見つける事ができませんでした。

URLリンク(api.cakephp.org)

279:nobodyさん
08/03/23 13:03:51
>>278
ファンクションて何ですか?素人は書き込まないで下さい

280:278
08/03/23 13:46:28 9wMqWTzf
>>279
先に挙げたURLで、「Public Member Functions」と記述されていたので、
ファンクションと書かせてもらいました。

methodと言えばいいですか?
既存のものでいうと、findAllやsaveなどの事です。

ご存じでしたらお教え下さい。

281:nobodyさん
08/03/23 14:00:59
>>280
こんなとこで聞くよりも自分でソース見た方が早くね?

282:nobodyさん
08/03/23 21:00:13 xiSCrZA7
>>275
会員登録プラグイン、完成したら俺にくれ

283:nobodyさん
08/03/23 22:20:17
>>282
いらねー。たぶん需要ない
会員登録なんてすぐ作れるやんwww

284:nobodyさん
08/03/23 23:07:41
>>278
カラム単位の更新でいいなら、saveField。

$this->Post->id = $id;
$this->Post->saveField('Address', 'Hokkaido');

285:nobodyさん
08/03/23 23:25:30
いらなきゃ使わなきゃいいじゃん。
小さい車輪だろうが再開発をしなくて済むなら助かる。

286:nobodyさん
08/03/24 00:14:26
再開発する機会が少ない。激しく無駄
そうじゃなければ、すでに作ってる人たくさんいるよ


287:nobodyさん
08/03/24 00:19:02
ほんとにいらなければ何もコメントしないので、たぶん荒らし。
スルー推奨。

しばらく前、本やWebを参考にRoRを使っていたが、cakePHPの方が
使いやすい。
ひょっとしたら、RoRでActiveRecordとかに若干慣れたので、
馴染みやすかっただけかもしんないけど。

288:nobodyさん
08/03/24 00:22:17 gAnd/HKb
Cakeのプラグインって、なにか有名なのってあったっけ
なんのためにプラ銀機能なんて実装されてんの?

289:nobodyさん
08/03/24 03:29:33
都道府県データどこにいれてる?

290:nobodyさん
08/03/24 03:37:25
コントローラ全体じゃなくてメソッド単位でヘルパー、コンポーネント呼び出すにはどうすればいい?
会員登録ページのメソッドにアクセスしてるにもかかわらず
コントローラでPaginationコンポーネントを定義していれば
ページ処理の関わるクラスがnewされるんでしょ


291:nobodyさん
08/03/24 13:06:37
ヘルパーは細かく考えずにコントローラ単位で呼び出すのがCake流
コンポーネントやモデルはヘルパーに比べればメソッド単位で呼び出しやすいけど
こっちも深く考えずにコントローラ単位で呼び出すんだ
多分

292:nobodyさん
08/03/24 13:16:08
例えばググレカスアクションでほげヘルパーを呼び出す場合

function gugurekasu() {
    App::import('Helper', 'Hoge');
    $ajax = new HogeHelper();
}

293:nobodyさん
08/03/24 20:55:32
まあ、そんなに特定のアクションでだけ
ヘルパーとか呼び出したいのなら、
そういうコンポーネントを作ればいいんじゃないのかな?

コンストラクタあたりで、url見てごにゃごちゃすれば出来るでしょう?

294:nobodyさん
08/03/25 00:59:47
>>292
ネーミングが中途半端だな
HogeHelperだけ普通やん

295:nobodyさん
08/03/25 01:51:15
>>294
むしろ$ajaxに突っ込んで欲しかったな

296:nobodyさん
08/03/25 10:30:40 Qe2AafnS
モデルってあんまりごちゃごちゃ書きたくないよな、dbdesigner2cakeとか使ってるとメンテナンスの面からとく。
だからといってコントローラにごちゃごちゃとロジックを書き並べたくないので
コンポーネントにすべてモデルを操作するカスタムメソッドを記述してます。

これって俺だけ?

297:nobodyさん
08/03/25 10:37:30
だからコントローラにいろいろ書くのは
まずいケーキだってケーキ様が言っている。

URLリンク(cakephp.org)


298:nobodyさん
08/03/25 10:46:51
>>297
ケーキがどうのこうのいおうが
自分の見やすい書き方が一番

たとえば1万step以下のコードなら
全部コントローラに書いた方がいい、みたいなね!



299:nobodyさん
08/03/25 10:55:58 Qe2AafnS
>>297 
3ページ目? こんなにモデルに書くもんかね…
俺だったらcとmの間のコンポーネントをずっしり書くな。別のプロジェクトにも使いまわしできるし。
コントローラだとほぼ、使いまわせないしな。

300:nobodyさん
08/03/25 11:02:26
1万ステップコントローラにべた書きとかすごいね

301:nobodyさん
08/03/25 11:05:24
>>296
コントローラに関する再利用性の高いメソッドはコンポーネント
モデルに関する再利用性の高いメソッドはビヘイビア

再利用性が高いロジックじゃないとダメ
そのロジックがコントローラ側かモデル側かどっちに属するかを間違えるとダメ

302:nobodyさん
08/03/25 11:07:56
>>300
再利用性が無いなら
10万stepsでもコントローラにベタ書きするしかないよ

303:nobodyさん
08/03/25 11:08:52
>>299
コンポーネントはコントローラとモデルの仲介役じゃねーよwww

304:nobodyさん
08/03/25 11:12:12
>>299みたいに再利用性の低いものまでコンポーネントはダメだろな


305:nobodyさん
08/03/25 11:13:20 Qe2AafnS
ビヘイビヤって1.2からのやつだよね?

306:nobodyさん
08/03/25 11:14:25
>>296
コンポーネントにすべてモデルを操作するカスタムメソッドを記述してます

これダメだろ?再利用性の高さとか無視してるやん

307:nobodyさん
08/03/25 11:17:23
1.1てバリデーションのyaml化できないんでしょ
それだけでもオワッテルw

308:nobodyさん
08/03/25 11:22:06
都道府県データとか
男性・女性・オカマとか
こういうセレクトに必要な初期データはどこへ入れるの?

309:nobodyさん
08/03/25 11:38:31
>>307
spyc重くね?

>>308
とりあえずモデル作ってfind('list')呼んでセレクトボックスへ流す。
都道府県データなんてほぼ100%変更出ないからデータの中身は定数でもいいし
郵便番号検索とか使うアテがあるならデータベース使う。
中で何やってるかは置いといて、ともかくモデルから呼べる事が大事。

310:nobodyさん
08/03/25 11:42:07
>>309
モデルのメソッドの中に都道府県データをいれて
呼び出してもOK?
もしくはDBからひっぱる、それ以外に方法はわからない

311:nobodyさん
08/03/25 11:44:21
データ量の多い定数なら、別ファイルにして
呼び出すときにモデル経由でincludeして呼び出すのがいいのかな


312:nobodyさん
08/03/25 12:29:56
>>309
> spyc重くね?
書くのはYAMLでもキャッシュとしてPHPのシリアライズデータに
変換してそれを読み込むから重くない。

313:nobodyさん
08/03/25 12:34:26
>>298
ケーキを使っている以上ケーキ様の言うことは絶対です。

コンポーネントにいろいろ書くとどれだけテストが大変になるか。

314:nobodyさん
08/03/25 12:38:32
>>308
> 男性・女性・オカマとか
これじゃ足りないな。

現在の肉体的性別 男・女
生まれたときの肉体的性別 男・女

現在の精神的性別 男・女
生まれたときの精神的性別 男・女

好きな性別 男・女・両方・肉体が男・肉体が女

まだ足りないかもな!

315:nobodyさん
08/03/25 13:04:07
>>313
再利用できないものは
コントローラーにいろいろ書くしかない
ケーク様が何も用意してくれてないから

316:nobodyさん
08/03/25 13:06:05
>>298の言ってる事はともかく
>>313はAuthComponentのソース見た事あるのかな

317:nobodyさん
08/03/25 16:31:35
コンストラクタでぐにょぐにょしたいときは
コンストラクタ内で先に
parent::__construct();
を呼ばないとダメだよ
なぜ?て
それは>>318が答えてくれるはず

318:nobodyさん
08/03/25 17:10:42
うんこちんちん

319:nobodyさん
08/03/25 17:42:53
こんなに、解釈によって作り方が変わって来ちゃうなら、フレームワークの「良い意味での縛り」のメリットが無いね。
それぞれが間違いとも正解とも言えないから余計めんどくさい。
もっと縛りがキツければ良いのに。

320:nobodyさん
08/03/25 18:12:31
>>319
バカがルールを勘違いしてるだけwww

321:nobodyさん
08/03/25 18:24:02 Qe2AafnS
ビヘイビアのうまい使い分けがわかんないー

Emailコンポーネントと連携して"emailable=1"を判別してメールするビヘイビアだとか、
ソフトデリート(=削除フラグ=1を削除)を実装したビヘイビアとかのサンプルは目にした
んだけど、もっと実践に役立つ使い道ってどんな風なの??

322:nobodyさん
08/03/26 01:26:50
俺が作っているやつでは、「自動入力フィールド」をビヘイビアでやっている。
ユーザーが入力した情報を加工したものを別フィールドに自動的に保存する。
データベースのセオリーからいえば計算で求められる物なのでビューやトリガーを使うところだが、
パフォーマンスを重視&汎用性を高めるためにこうしている。

あとどこかでぐぐって見つけた画像を保存するビヘイビア。

あるテーブルに保存したら、自動的にほかのテーブルにメタ情報を保存するビヘイビア
つまりトリガーの代わりだね。

文字コード変換ビヘイビア

仕様が変わって使っていないが、一つのフィールドに複数の値を入れられる配列型フィールドを作るビヘイビア。
(一対多のテーブルを作れというなよ?そんなJOINが発生する重い処理を作りたくないこともあるんだ。
SQL99 で標準規格化されたしね。)それの応用でオブジェクト(シリアライズ)型

それともうひとつあるのだが、これはちょっとアイデア賞物だと思うので自分のブログで書きたいw

結構いろいろ使っているなw 総論としてデータベースの機能を拡張したいときに使っている。

323:nobodyさん
08/03/26 02:10:48
>>322
日本語でおk
あいかわらず文章下手糞やなw
単純なことをわかりにくい表現するの好きやな
前スレから全く変わってねーな

324:nobodyさん
08/03/26 02:19:26
>>322
結局cakeライブラリのモデルで実装されてる機能を少し拡張したいときに
ビヘイビアにいれてるんでしょ?

325:nobodyさん
08/03/26 02:29:03
>>322
ユーザーが入力した情報を加工したものを別フィールドに自動的に保存する。

この自動的て具体的にどういう意味?

326:nobodyさん
08/03/26 02:34:57
>>322
ユーザーが入力した情報を加工したものを別フィールドに自動的に保存する。

これは前スレで自作ヘルパーでやってなかったか?
パフォーマンスを重視&汎用性を高めるというのに具体的内容が欲しい

327:nobodyさん
08/03/26 02:40:36
>>322
一つのフィールドに複数の値を入れられる配列型フィールド

SNSのような大規模サイトでもこれ使う機会なんて滅多にないんだが、何作ってんの?

328:nobodyさん
08/03/26 03:04:09
>>322
配列型フィールドて
mysqlでも検索や集計はできるの?

329:nobodyさん
08/03/26 03:06:22
>>322
配列型フィールドを使わない人にとっては
激しく必要のないビヘイビアじゃね?

330:nobodyさん
08/03/26 03:12:41
>>322
それともうひとつあるのだが、これはちょっとアイデア賞物だと思うので自分のブログで書きたいw

恒例自慢きたこれw

331:nobodyさん
08/03/26 03:36:11

なんだこの過剰反応ぶりw

みるからに同一人物のようだが、
ただの使用例に必死すぎだろw

332:nobodyさん
08/03/26 03:41:59
○○○を使わない人にとっては
激しく必要のない○○○じゃね?

なんにでも当てはまるなw
無理やり反論しようとして滑ってる。

333:nobodyさん
08/03/26 03:47:41
>>331
>>332
同一人物乙

334:nobodyさん
08/03/26 03:51:47
確かに同一人物だが、それが何か?

335:nobodyさん
08/03/26 04:15:24
>>333
cakephpとは外れたこと書くな

336:nobodyさん
08/03/26 04:38:16 pkIggipT
CakePHPで開発するアプリを設計する際にUMLで書いてる人いる?
シーケンス図やクラス図なんかどんな風に記述してるかとか見せてもらえると
参考になります。

337:nobodyさん
08/03/26 04:51:55
>>336
UMLを使うと従来の方法より効率が落ちる時もある。
なぜなら、従来なら手書きで適当に書いてきた図をUMLでどうやって書けばいいのか調べなければならないから。
書き方が全部頭の中に入った後でなら従来よりスムーズに開発ができるようになるかもしれない
が、しかし、それまでは相当の苦労が必要w
オブジェクト指向開発とUMLとはまた別の話でUMLはオブジェクト指向開発の道具にすぎない


338:nobodyさん
08/03/26 04:59:22
>>336
UML?時間の無駄だろ。そんなん書いてたら
工数オーバーするしで誰も喜ぶもんおらんで


339:nobodyさん
08/03/26 05:04:03
C#やJAVAならわかるけどPHPでUMLて
そんなクラスが複雑じゃないやん

340:nobodyさん
08/03/26 05:24:25
そういう問題じゃねーだろw

341:nobodyさん
08/03/26 10:28:27
>>339
確かにphpでUMLてぐぐったけどあまり無いな

342:nobodyさん
08/03/26 10:50:05
そりゃぐぐったことが無いという人もいるだろう。
だがそれは個人の話であって統計的な意味は無い。

検索結果のほうがまだ意味があるな

PHP UML の検索結果 約 957,000 件中 1 - 10 件目 (0.03 秒)
Java UML の検索結果 約 593,000 件中 1 - 10 件目 (0.04 秒)
C# UML の検索結果 約 404,000 件中 1 - 10 件目 (0.04 秒)

343:nobodyさん
08/03/26 11:29:28
Cakephpと関係ない話すんなやボケどもが

344:nobodyさん
08/03/26 11:31:39
なんでCakePHPにUMLの話が出るのかわからんw

345:nobodyさん
08/03/26 11:37:41
>>340
そういう問題だろw

346:nobodyさん
08/03/26 11:58:29
俺はJavaをメインでやってるけどUMLは
複雑になってくるクラス間の関連性の構造の手助けとしてUMLを活用することが多い
だから>>339のいってるように複雑なクラスで無ければ必ずしもUMLが必要とは思わない


347:nobodyさん
08/03/26 12:17:07
ユースケースは必ず書くけど、シーケンスみたいな実装よりの奴は
実装者が未熟な場合か、処理が複雑なときだけかな。
クラスダイアグラムはモデル限定でこれもテーブル構成が複雑なときだけ。

ユースケースは文書に起こして仕様書にするので必須。

PHPのクラスを自動生成してくれる奴なかったっけ?
あれでCakeのモデルを自動的に管理してくれると楽かも...楽じゃないかw


348:nobodyさん
08/03/26 12:24:40
UMLのクラス図ってようするに継承関係と関数定義(実装コード無し)を
書いているだけでしかないからなぁ。

それならコードで書いてコードからクラス図を自動生成したほうが楽。

349:nobodyさん
08/03/26 12:38:45
Javaだとクラスが複雑になってしまうんだよね。
正確にはEJBを使った場合だが、同じものを作るにしても
無意味に複雑になりすぎる。
あれじゃあ、UMLが必要になるのもわかる。

350:nobodyさん
08/03/26 13:44:26 ktIW9Uv7
ちょwww おまえら設計書も書かずに開発しちゃってるのかよ、涙がでるな。
それだから「できました」とかいいながらテストしたらバグ出まくりのプログラムなんか量産しちゃうんだよwwww

UMLじゃなくてもいいが、実装前に詳細なロジックを書き起こしてからコードつくるのは常識だろ。
時間がかかる、めんどくさい、頭の中にもう仕様書書いてあるから、という奴に限ってたいした技術力じゃないんだよな。
設計書ってのはコーディング作業が楽になるだけでなく、チーム関係者との意識共有や、リリース後しばらくたってメンテが必要になった時に効果がでるもんだぜ。
プロとして仕事でやってるならば当たり前だと思ってるが、ここにはプロはいないのか?

351:nobodyさん
08/03/26 14:32:19
楽譜の読めないミュージシャンもいるしな。

352:nobodyさん
08/03/26 15:25:48
>>350
実装前に詳細なロジックを書き起こしてからコードつくるのは常識だろ

それお前だけの常識乙w
CakePHPのような小規模案件に無理があるぞお前w

353:nobodyさん
08/03/26 15:29:27
>>350
どこの大手で働いてんだよCakePHPさわってる分際でw

354:nobodyさん
08/03/26 15:34:17
>>350
CakePHPでいくらも稼げてねーくせにw


355:nobodyさん
08/03/26 15:37:50
短納期で回転させるのがCakePHPのメリットなのに
わざわざUMLとか工数伸びるだけやんけ
そんなんで、ほんまに黒字になってんのかw

356:nobodyさん
08/03/26 15:41:14
>>350
スレ違いながら言わせてもらうと・・

実際、開発しながら見えてくる事って多いよね。
キチンと設計や仕様固めが出来ないまま、見切りスタートを切ってしまうことも多々。
問題は、その仕様の追加、変更に対応出来るように設計する事だよ。

357:nobodyさん
08/03/26 16:12:51
そうなんだーUMLって書かないんだ。
俺は書き方すら知らないけど。

作る前に一応メモに何をどうするかを書き出して、その通りに作ってくね。
あまりに自分の頭の中だけで作ると変数とか何を使ったかわからなくなったり。

イラレで仕様書とか作るのが激しくめんどい。
よって手書きで自分はやってます。

358:nobodyさん
08/03/26 16:15:44
>ここにはプロはいないのか?
w

359:nobodyさん
08/03/26 17:32:25
え…設計フェーズ飛ばしていきなりコーディングに入るの?ギャグだろ?
最低限、要求定義書とユースケースとビジネスロジック(=モデル)の関係図とそれを基にしたスキーマ設計位は必要じゃねーの
打ち合わせ段階で作りまくるじゃん、そんなの
どやってクライアントのイチャモンに対応してるの?

>>357
イラレで仕様書とか正気?

360:nobodyさん
08/03/26 17:56:28
パワポが激しくめんどくさい。
よって俺もexcel&イラレだな。

361:nobodyさん
08/03/26 17:58:19
まあ、コーディング前の設計は
概要みたいなもんだからね。

たとえば関数をすべてコーディング前に列挙できるかといったらまず不可能

プロのプログラマはコードで設計するんだよ。
鉛筆で図を書くか、キーボードでコードで書くかの違い。

362:nobodyさん
08/03/26 18:01:13
プロはソースにたくさんコメントを残す。

363:nobodyさん
08/03/26 19:04:34
×プロはソースにたくさんコメントを残す。
○プロはソースに意味のあるコメントを残す。


364:nobodyさん
08/03/26 20:37:18
>>359
もっとプログラマと交流深めた方がいいよ

365:nobodyさん
08/03/26 20:39:13
>>359
どんだけ狭い世界観なんだよ

366:nobodyさん
08/03/26 21:07:55
10分以内( ´,_ゝ`)

367:nobodyさん
08/03/26 21:55:41
>>364
この人、確実に嫌われてるだろうな、プログラマに。

368:336
08/03/27 00:00:03 d9lPRB8S
>>336です
意外と盛り上がっててびっくり…

369:nobodyさん
08/03/27 01:42:38
>>359

イラレで仕様書は普通。

370:336
08/03/27 02:53:28 d9lPRB8S
>>369
マジかよ。それなんてイラレ?

371:nobodyさん
08/03/27 11:48:14
たとえばフォームにある省略可能な数値型の項目に
値を省略して(空文字で)データベースに保存した場合空文字でINSERTされる。

このときのどう保存されるか動作はデータベース依存であり
MySQLは0になり、PostgreSQLはエラーになる。

URLリンク(trac.cakephp.org)
チケットが出ていたみたいだが、修正無しでクローズ?

これ直る見込みないんかいな。確かに空文字とNULLは違うものだが
「データベースの省略可能な数値フィールド」ってのは
数値とNULLしか入れられないんだよね。

どうせNULLが入ったフィールドをModelから読み込むと
空文字になるんだし(あってるよね?)
NULLに変換して保存したほうが実用的だと思うんだけどなぁ。

データベース間の違いも吸収したほうがいいし。

beforeSaveあたりで書き換えるか・・・

372:nobodyさん
08/03/27 15:25:42
>>371
それはCakePHPに限ったことでは無いから死んでこい

373:nobodyさん
08/03/27 15:27:34
>>371
そんなどうでもいい作業するくらいなら
コンビニでバイトするよ

374:nobodyさん
08/03/27 17:50:07
CakePHPのアソシエーションでBelongsToやhasOneを渡り歩いて
広範囲のテーブルから値を持ってくるにはどうすればいいんでしょうか

SQLならLEFTJOINを繋げて行けば済むのですが
単純にrecursiveを増やしていくとクエリの量が異常に増えて困っています

375:nobodyさん
08/03/27 19:31:16
最近低レベルの煽りしか返さない奴がいるなウザイ。
どうせ同一人物だろうからトリップつけてくれ。削除すっからさ。

376:nobodyさん
08/03/27 19:48:23
>>375
低レベルの質問しかないから仕方ないこと

377:nobodyさん
08/03/27 19:51:40
>>374
リファレンスみろよ
こんなとこで聞くなカス

378:nobodyさん
08/03/27 20:14:15
>>376-377 だからトリップつけろってw

379:nobodyさん
08/03/27 21:54:01
>>377
アソシエーションが直接繋がっている関係なら資料は山ほどあるのですが
例えば4テーブル先まで繋がっているデータを手繰り寄せてくる場合、デバッグ情報を見ると
一旦findで取得してきた配列をforeachで回して一つ一つまたfindを使っているように見えます
結果、データ自体は取ってこれるもののSQLの発行数が異常な量になってしまいとても使う気になれません

SQLの発行を抑えつつもアソシエーションを柔軟に広げるためには、自前でqueryを使うしかないのでしょうか?

380:nobodyさん
08/03/27 22:01:13
ユニットテストでfixturesの機能使っている人いる?

var $fixtures = array(~~~);

こんな感じでfixturesをしているわけだけどさ、
なんかテーブルの生成のタイミングとか変じゃない?

テストを単体で実行すると問題なく動くんだけど、
すべて実行するとテーブルが無いとか言われることがある。



381:nobodyさん
08/03/27 23:06:17
>>370
adobe社のイラレだと思うけど。

>>375

わかる。人をバカにしてばっかだよな。あおってるやつ。
見てて気分悪い。

>>376 >>377
リファレンス見てわかるならそのURL教えてあげようよ。
しかも、聞いてる 374 はある程度知識あると思うよ。
もうちょっと人を思いやる気持ちを持とうよ。

382:nobodyさん
08/03/27 23:10:00
>>372
まず、おまえがシネ

383:nobodyさん
08/03/27 23:23:59
>>379
質問の内容があまりにも素人すぎ
CakePHPばかにしてんのか?




384:nobodyさん
08/03/27 23:25:34
誰も馬鹿にしてないから答えろよw

385:nobodyさん
08/03/28 00:13:02
人をバカにすることで自分が上に立ったような感覚を味わいたいんだろうな
残念なやつが多い

>>379
その4テーブルはどんなリレーションなの?
で、今はどんなアソシエーションを記述してんの?
もしかしたらDB設計が悪いという可能性もある。

386:nobodyさん
08/03/28 00:51:53
>>385
各フレームワークの評価目的でプロトタイプを作っていますので
特定のテーブルの再設計で問題を解決するアプローチでは応用範囲が非常に限られてしまいます
申し訳ありませんがCakePHP側での解決を求めています

例えばごく単純にモデルが
A→B→C→D
とbelongsToで数珠繋ぎにアソシエーションが設定されている場合
AのリストにB~Dのデータを動的に付加して取得したいとすると
どのような指定をすればよいのでしょうか

SQLならJOINをただ書き連ねていけばいいのですが

387:nobodyさん
08/03/28 01:28:45
>>386
CakePHPさわってどれくらい?
あまりにも初心者的な質問やめてくれる

388:nobodyさん
08/03/28 01:30:56
スレ分けて欲しいな。CakePHP初心者スレ作ってよ

389:nobodyさん
08/03/28 01:42:40
>>386
初心者が他人の力借りて簡単にCakePHP評価しようなんて
CakePHPなめすぎだろ?
自分で死ぬ思いでググれボケ

390:nobodyさん
08/03/28 02:37:39
>>386
できそうにない。

URLリンク(trac.cakephp.org)
上で同じようなこと言ってたけど対応なしにcloseされた模様。
URLリンク(trac.cakephp.org)
上も同様のことを言ってる。3週間ほど前。

>>377 >>383 >>387 >>388 >>389
俺もこれの具体的な解決方法を知りたいです。どうか教えてください。

391:nobodyさん
08/03/28 02:57:36
>>390
CakePHPの知識全くないくせに英語力を自慢がしたいの?

392:nobodyさん
08/03/28 03:06:49
>>390
>>371
ここにいる馬鹿どもが、みんな英語わかると思ってんのか?w
さりげなくバカにしてるだろ

393:nobodyさん
08/03/28 03:20:48
>>390
今調べて出来そうにないって。こういうケースはじめてなの?
経験浅すぎじゃね。1つのサイトをCakePHPで完成させたことないやろ

394:nobodyさん
08/03/28 03:22:38
>>391
いや、これに関しての日本語の情報がなかなか見つからなかったから英語の記事を探さざるを得なかっただけ。
で、CakePHPの知識がある人はこれをどうやって解決してるんでしょうか?

395:nobodyさん
08/03/28 03:31:35
>>390
どうして、できそうにないか具体的に日本語で説明しろ。わかったな命令だ


396:nobodyさん
08/03/28 03:56:27
このスレ、なんか冗談だと思えるくらい殺伐としてんな w

397:nobodyさん
08/03/28 06:59:33
>>396
何でだかアンチが混じっている。
で、cakePHPは重いとか、質問者を叩いたり。
無視推奨。

つか、アンチしてる人、cakePHPを無視すればいいのにね。

398:nobodyさん
08/03/28 08:46:16
英語のサイト貼りつけて叩かれるのは初めて見たw
日本のサイトで分からなければ、海外サイトくらい見るだろ。

分からなければWeb翻訳すればいいんだしな

399:nobodyさん
08/03/28 09:18:10
粘着気質で知性もないとか救いようがないな。
トリップの付け方も知らないらしいし、ほんと終わってんな。w

400:nobodyさん
08/03/28 09:20:55
なんだこの流れ
とてつもないバカが何人かいるな


401:nobodyさん
08/03/28 09:29:46
>>390
まさしくそのtickets通りです
CakePHPは隣り合ったアソシエーション間ではJOINを繋いでSQLワンコールに最適化してくれますが
それ以上のテーブルをまたいだ関係を持とうとすると途端にクエリ量が増えてしまいます

個人的にrecursiveでアソシエーションの深度を指定する考え方は
好感が持てるのですが、負荷の高さを考えると使用をためらわざるを得ません

サブクエリをインテリジェントに挿入しろとは言いませんが
今回の様な使用頻度の高いと思われる(かつ、割と実装の想像しやすい)処理ならば
既に解決された方がいらっしゃるのかと質問に至りました

--
先ほどContainableBehaviorを試してみましたがクエリ量は変わりませんでした
やはりコアに直接手を加えないといけないようですね(´・ω・`)

402:nobodyさん
08/03/28 10:01:46
A→Bのクエリ発行したときに
モデルにB→Aのアソシエーションも記述してあると
B→Aのクエリも発行される
だから
A→B→C→D のようなのをそのままやっちゃうと
えらいことになる

だから、いらいないアソシエーションはunbindModelでぶった切る

あと、1.2だと発行クエリが1.1より最適化されている
(つまり、少なくなってるってこと)


403:nobodyさん
08/03/28 10:11:39
>>397
明らかにアンチじゃない奴のほうがたち悪いぞ。質問者叩いてるのもそう。

>>402
>>401の問題解決にはならないんじゃない。B->Aのアソシエーションがなくても起こるから。

>>401
DBにview作れば早いと思うよ。

404:nobodyさん
08/03/28 10:15:32
質問があまりにもバカすぎて・・・
レベル低いよな。
ここでアフォみたいな質問してるやつは
CakePHPでサイト構築したことあるのかと聞きたいよ



405:nobodyさん
08/03/28 10:19:27
あまりにもバカみたいな質問にバカみたいな回答が多すぎ
もっと常識レベルでの会話して欲しいな
駄文ばっかで何の役にも立たないよ

406:nobodyさん
08/03/28 10:27:40
>>405
それそのまま>>405に当てはまるのわかる?

407:nobodyさん
08/03/28 10:30:15
もっと常識的な質問たのむ

408:nobodyさん
08/03/28 10:36:03
かわいそうに

409:nobodyさん
08/03/28 10:57:56
バッチ処理で長くかかる処理をやるのなら話は別だけど
ウェブアプリなんて画面に表示する少ないデータを
表示するだけなんだからJOINしなくてもいいと思うんだけどね。
どうせ複雑なJOINならJOINするのにも負荷かかるわけだし。

ま、パフォーマンスと開発効率のトレードオフ。
どうしても必要なら、モデルに専用の検索メソッドでも作って
自分でクエリー書けばいいんじゃない?

410:nobodyさん
08/03/28 11:00:25
もっと常識的な質問たのむ

411:nobodyさん
08/03/28 11:03:37 q/btZ3WH
アンチがしつこくネガティブキャンペーンするのも
CakePHPが人気になって普及してきた証拠かなぁw

アンチじゃない人はIDだすようにするか?
そうすればID出していない人はアンチってわかるし。
出したら出したで削除できるしw

412:nobodyさん
08/03/28 11:10:07
アンチを勘違いしてると思うが
いい質問には、マナーをもって接するが
ろくでもないレスばっかりだからな

413:nobodyさん
08/03/28 11:13:12
>>411
自治厨乙。
だいたいにして、IDなんていつでも変えれるんだから意味ないじゃん。

414:nobodyさん
08/03/28 11:14:01
ろくでもないレスは無視するかマナーをもって
訂正を促すのが良い返答の仕方だよ。

415:nobodyさん
08/03/28 11:14:44 q/btZ3WH
>>413
やってみなきゃわからないじゃんw

416:nobodyさん
08/03/28 11:17:51
>>415
どんだけ必死なんだよw

417:nobodyさん
08/03/28 11:57:59 anJTbKap
>>409
もちろん速度を重視しなくてはならない場面ならば専用メソッド内でSQLを書きます
しかし、上記の様にシンプルなアソシエーションすら動作が怪しいとなると
フレームワーク自体に手を出して最適化させた方がコスト的にベターかなと思います

>>403
複雑なアソシエーションのパターンが出来上がってる時はView使った方がいいですね
今ふと考え付いたのですが、結合済みの仮想テーブルを作って、それを元に
CakePHP側のモデルを構築するアプローチは面白いかもしれません

#仮想テーブルへの更新作業はDB依存のため怪しい臭いはしますが

418:nobodyさん
08/03/28 12:20:53
>>417
負荷を考えるならフレームワークやめろ
CakePHPなんてのは、どうでもいいクライアントに高速納品するための道具てことに気づけよバカ

419:nobodyさん
08/03/28 12:26:48
>>417
今頃フレームワークの評価とか手を出すとか、どんだけ遅れてんだよ
この業界は進歩が早いの知ってる?

420:nobodyさん
08/03/28 12:43:39
>>417
> 結合済みの仮想テーブルを作って、それを元にCakePHP側のモデルを構築する
view作ればって言ったのはそういうこと。
面白いかどうかはおいといて、現状の打開策としてはアリかなと思うわけです。

> 仮想テーブルへの更新作業はDB依存のため怪しい臭いはしますが
このDB依存は仕方ないと割り切ればいいんじゃないかな。割り切れるところだと思うし。

421:nobodyさん
08/03/28 12:49:51
>>417
やる前にあれこれ聞かずにやってみろよ
こんなとこで解決できれば苦労しねーよクソが

422:nobodyさん
08/03/28 12:53:20
評価なんてソース解析して自分で実際にサイト構築しないとわからねーよ
やってくうちに想像しない難点が沢山でてくるよ



423:nobodyさん
08/03/28 13:01:42
>>417
速度重視とか柔軟性考えるならCIにしろや

424:nobodyさん
08/03/28 13:04:47
CakePHPを最適化させにくいフレームワーク
最適化したいならCIスレにいって、このスレからでていけや

425:nobodyさん
08/03/28 13:28:19
>>420

426:nobodyさん
08/03/28 13:34:05
っていうかJOINにならないというのは
どのフレームワークでも同じこと。
CIでもSymfonyでもRubyOnRailsでも同じだよ。

特にCIは最悪だね。いろんな意味で。
ここではすれ違いだから言わないけど。

427:nobodyさん
08/03/28 13:40:13
>>426
どのフレームワークも同じなら軽量でサクサク動作するCIの方がマシ

428:nobodyさん
08/03/28 13:44:02
>>417
> しかし、上記の様にシンプルなアソシエーションすら動作が怪しいとなると

シンプルではないよ。

CakePHPでもその他でもそうだけどO/Rマッピングというのは
従来の表形式の使いづらいリレーショナルデータベースを
高レベルに扱いやすく使えるようにするもの。

リレーショナルデータベースを基本に設計されたものではなく
より理想的なオブジェクト指向風なデータ構造をもとに設計されたもの。
だからいろんな取り出し方ができる出来る柔軟性がある。

たとえば、behaviorでデータ挿入・取り出し時に色んな処理をかませられる。

そういう柔軟性を持たせながらシンプルなSQLに置き換えるのは容易ではない。
不可能な場合すらある。

なんでもかんでもパフォーマンスを気にして無駄なものを作るのは
初心者のやること。一日働いて3万円人件費をかけるのなら、
その3万円でスペックをあげたほうが総合的に考えてメリットが
高いという時代だから、今は。

429:nobodyさん
08/03/28 13:50:03
CIはデータベースを使わない。使う頻度が少ない場合にはいいけど、
データベースを使う場合、貧弱だよな。

あれならSQL直書きした方がいいってほどメソッドがアホらしいしw
なによりビヘイビアが無いのが一番痛い。

430:nobodyさん
08/03/28 13:50:47
>>428
なんでもかんでもパフォーマンスを気にして無駄なものを作るのは
初心者のやること

サイトリニューアルなど
既存ユーザーが多数いる自社製品ならパフォーマンスを意識する



431:nobodyさん
08/03/28 13:52:21
> 既存ユーザーが多数いる自社製品ならパフォーマンスを意識する
マシンスペックを上げろ

432:nobodyさん
08/03/28 13:54:32
>>429
複雑なアソシエーションはSQL直書きになるんならCIが理にかなってる



433:nobodyさん
08/03/28 13:55:17
複雑なものじゃなくてシンプルにしようと考えような。

434:nobodyさん
08/03/28 13:55:42
>>426
symfony(というかpropel)はJOINになる

435:nobodyさん
08/03/28 13:56:08
>>431
ユーザーが増えるたびに、どんだけマシンが必要になるんだよ


436:nobodyさん
08/03/28 13:56:12
JOIN使わないで一回一回よんでも
パフォーマンスはたいして変わんないんだけどなw

437:nobodyさん
08/03/28 13:57:04
>>435
ユーザーが増えると重くなるのはどれでも一緒ですが?

働いていない人は、人件費というコストを計算に入れないからなぁw
まあ、がんばれやw

438:nobodyさん
08/03/28 13:57:54
>>436
変わるよ あほか

439:nobodyさん
08/03/28 13:57:57
SQL直書きになる機会が多いならCIがいい

440:nobodyさん
08/03/28 13:58:21
O/Rというのはリレーショナルデータベースからの
脱却に意味があるというのに、今時SQLなんて低レベルなことやるかよw

441:nobodyさん
08/03/28 13:58:54
>>437
ずっと開発してるわけじゃねーからw
人件費とか1回ぽっきりやん

442:nobodyさん
08/03/28 14:00:15
複雑なSQLならO/Rマッピング使えないじゃん
今のCakePHPなら
だったらCIでSQL直書きが最高よ

443:nobodyさん
08/03/28 14:03:25
>>437
重くなりかたが異なってくるんですが?

1回で済む処理を2回のクエリで行ってるとアクセス数が増えたときにクエリ発行数が大きく変わることがわかんない?
ほんとにプログラマなのか?まぁ、がんばれや

444:nobodyさん
08/03/28 14:05:37
ぷw 頭固いな。mixiの話とかしらんのかいな

mixiでは”高負荷に耐えるためにJOINを使っていない”んだよ。

URLリンク(www.google.co.jp)



445:nobodyさん
08/03/28 14:07:29
>>442
使えていますが? JOINが使われないってだけでしょうが。

パフォーマンスに問題が無い場所で、
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHPと、
SQLを書くのと同等の手間をかけなければならないCIでは
どちらが優れているかは言うまでも無く、CakePHPですね。

446:nobodyさん
08/03/28 14:08:18
>>441
マシンスペックを上げるのも一回ぽっきりですが?

447:nobodyさん
08/03/28 14:09:13
ビヘイビアがない時点でCIは糞w

448:nobodyさん
08/03/28 14:11:24
>>445
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHP

group byとかどうやんの?

449:nobodyさん
08/03/28 14:12:45
>>445
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHP

この発言無理がありすぎやろw

450:nobodyさん
08/03/28 14:13:42
>>444
あのさ、読解力なさすぎ。
「高負荷に耐えるためにJOINを使っていない」とは書いてない。


451:nobodyさん
08/03/28 14:14:14
結局アンチはいつものCI厨だったなw

452:nobodyさん
08/03/28 14:15:24
>>450
ではJOINを使わない理由になんて書いていますか?言ってみてください。

453:nobodyさん
08/03/28 14:17:30
>>452
スケールするためにデータベースを分割し、JOINが使用できなくなったから。

454:nobodyさん
08/03/28 14:20:13
スケールとはパフォーマンスをあげるということです。

455:nobodyさん
08/03/28 14:21:44
うん。だから?

456:nobodyさん
08/03/28 14:22:38
>>455
おまえの負けてことだよ

457:nobodyさん
08/03/28 14:24:15
>>456
あからさまにバカだな。論理的に考えられないんだな。

458:nobodyさん
08/03/28 14:24:38
>>447
1.1使ってる人は真性なる糞ですね

459:nobodyさん
08/03/28 14:25:14
高負荷に耐えられるパフォーマンスを作り出す為に、
データベースを分割してJOINが使用できなくなった。

負荷を考えるのなら、JOINなんかするより、
マシンに投資してデータベースを分割(当然マシンも増えているはず)して
アプリケーションで行ったほうがいいということです。


460:nobodyさん
08/03/28 14:28:55
>>457
さっきまでパフォーマンスの話してたやろうが
論理的な会話してないのお前だろw

461:nobodyさん
08/03/28 14:31:33
結局CIが最強てことじゃんか

462:nobodyさん
08/03/28 14:37:17
CIはフレームワークを使っているとは思えないほど開発工数がかかる。

データベース部分は、SQLの単語(selectやfromやwhere)を
それぞれメソッドに置き換えて実行しないといけない。
なんとビックリw

だから糞。

463:nobodyさん
08/03/28 14:38:23
わろたw

$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);

$query = $this->db->get();

464:nobodyさん
08/03/28 14:38:41
>>459
ただ、「マシンに投資してデータベースを分割(当然マシンも増えているはず)して」が始めからできるわけじゃないんだよね。
だからSQL発行数も含め、パフォーマンスには常に気を遣うわけで。
mixiが今はソフトウェア側でパフォーマンスを気にしてないかっていったらそんなことはないし。

>>460
パフォーマンスの話してるよ。何言ってんの?
もう面倒だからお前いいよ。

465:nobodyさん
08/03/28 14:40:13
だからパフォーマンスを重視するところだけ
最適化して、あとは楽で速いコーディングをすればいいじゃんか。

パフォーマンスの基礎だよ?

466:nobodyさん
08/03/28 14:41:27
>>463
これいいね。わかりやすい構文だ
CakePHPの
find(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,)
これに比べれば天と地に差

467:nobodyさん
08/03/28 14:42:45
>>466
引数の数を勝手に増やすなw

最後の引数の意味言ってみろよ。
いえなければ赤っ恥だなw

468:nobodyさん
08/03/28 14:42:48
>>464
おまえ誰だよ?トリップでも番号でもいいから付けろよw

469:nobodyさん
08/03/28 14:44:26
>>463はPHP4だと
$this->db->select('title');
$this->db->from('mytable');
$this->db->where('id', $id)
$this->db->limit(10, 20);
こうなります。

470:nobodyさん
08/03/28 14:45:17
>>464
名無しで必死にレスしてるようだが
名前に番号でもつけてくれないと
今までどんな発言してんかわかんないんだがw

471:nobodyさん
08/03/28 14:46:08
>>468
どうせトリップつけさせて削除しようって魂胆だろ。
そんな手に引っかかるか。ばーかw

472:nobodyさん
08/03/28 14:46:42
>>469
わかりやすくていいね、さすがCI
ヌルヌルフレームワークとは大違い

473:sage
08/03/28 14:50:37 JUQ1v1x2
$this->flash で出てくるはずのページがIE6だと表示されん。ソースは吐かれてる。
ってことはUTF関係か。

474:nobodyさん
08/03/28 14:50:44
アンチレス繰り返してたら、えらい盛り上がってきた

475:425
08/03/28 14:54:55
すみません、途中投稿しました

>>420
その通りですね。同一アプリケーション内でDBをスイッチする事はありえないので
リスクとしては小さいため十分検討できます(一応、PostgreSQL使ってる方は注意です)

>>424
CodeIgniterもとてもいいフレームワークだと思います
ぜひその情熱で当該スレッドを活性化させて盛り上げて欲しいですね

>>428
確かにアソシエーションの自動判別が面倒(無理)という事情は分かります
面倒なSQLを叩かずオブジェクティブにデータセットを取得できる機能が
すでに実装されていているのですからそれを使うに越した事はありません
この辺りの実装はアプリケーション全体のパフォーマンスに影響するため
サーバ増設前の改良を十分に検討できる部分だと思います

476:nobodyさん
08/03/28 14:54:59
実はアンチを煽って盛り上げさせているというのはナイショだw
見ろ他フレームワーク(特にCI)の静けさを!

477:nobodyさん
08/03/28 14:56:44
>>469みたいなコードを書くぐらいなら
SQLをそのまま書いたほうがいいな。

478:nobodyさん
08/03/28 15:06:18
>>428
すみません
>>475の説明はちょっと意味不明ですね、スルー推奨です

479:nobodyさん
08/03/28 15:45:01
Cakeは糞

480:nobodyさん
08/03/28 15:54:32
aki(ryが本出してるから糞

481:nobodyさん
08/03/29 07:40:57
あの本は確かに糞だったな

482:nobodyさん
08/03/29 09:07:16
あれは本当に酷かった

483:nobodyさん
08/03/29 15:28:58
文句だけは達者だな

484:nobodyさん
08/03/29 15:56:30
達者?

485:nobodyさん
08/03/29 16:10:19
このスレはいつも無駄に盛り上がるよな

486:nobodyさん
08/03/29 16:54:04
>>484
ゆとり乙

487:nobodyさん
08/03/29 17:43:56
>>486
ゆとり乙

488:nobodyさん
08/03/29 20:03:50
>>486
ゆとり乙

489:nobodyさん
08/03/29 22:04:16 t2qvxoud
CakePHPっていいフレームワークだよな

490:nobodyさん
08/03/29 22:08:25
ソース汚いけどな

491:nobodyさん
08/03/29 22:15:25
最高のフレームワークだね
完璧すぎる

492:nobodyさん
08/03/29 22:29:55
おまいらマインドマップ使ってる?

493:nobodyさん
08/03/29 22:57:31
30才過ぎるとマインドマップ使わないと
トイレ行った後とか今まで何考えてたかさえ忘れる

494:nobodyさん
08/03/29 23:43:43 VJRoSuRr
なんでマインドマップの話になったか分からないけど、自宅と会社のPCに
FreeMindインストール済み。

自宅ではCakePHPのシステム設計に使ってる。
ひとつずつやる事片付けて、終わったブランチに「レ」のアイコン付けるのが
楽しい。

495:nobodyさん
08/03/30 02:14:14
UMLはルール化した図解表現
マインドマップは自由な図解表現

496:nobodyさん
08/03/30 02:16:24
マインドマップで設計し形になったものをUML化する


497:nobodyさん
08/03/30 02:17:48 xhO/sY7i
んで、UMLで書いた仕様書を投げ捨ててウンコする

498:nobodyさん
08/03/30 02:19:35
CakePHP使ってればUMLもマインドマップも必要ない

499:nobodyさん
08/03/30 02:26:47
作業途中に仕様的にやばい匂いがしたらマインドマップ使ってる


500:nobodyさん
08/03/30 02:31:49
問題を解決しやすい方法として
思ったことを、どんどん言葉として書き出す
わかってるからと頭の中でしまいこむと、全体的な解決図を結び付きにくくする

501:nobodyさん
08/03/30 02:45:33
難しい状況を言語化する能力がコミュニケーション能力での重要ポイントだと思う。
もっと言語化するクセつければ、コミュニケーション能力向上になるんじゃないかな

502:nobodyさん
08/03/30 17:27:12
render呼んだ後
すぐexit();
してる?

503:nobodyさん
08/03/30 20:27:27 3z+xm+ln
>>473
遅レスだが、ソースの頭にBOMを付けたら表示されるようになた。
が、viewのファイルは8Nで保存しておかないと、たまに悪さをするようだ。

504:nobodyさん
08/03/30 22:06:44
>>502
もっと常識的な質問たのむ

505:nobodyさん
08/03/31 10:30:36
>>502
してないよ

506:nobodyさん
08/03/31 10:59:21
>>505
コンポーネントでrenderを呼んだときは
exitしないとデフォルトのrenderが最後に読み込まれるよ

507:nobodyさん
08/03/31 11:00:31
cakePHPのテスト環境だけど
SeleniumとSimpleTestの組み合わせが最強?

508:nobodyさん
08/04/01 01:26:52 j0Vrw1hD
>>507
そっちのテストなら、セレニウムだろうと手作業だろうとなんだって良くね?

ユニットテストをするのなら1.2から正式対応したSimpleTestって言うだろうけど。

ていうか、テスト駆動開発って面倒ですよね、時間がかかるけど出来上がり安定するのは確かだけど。

509:nobodyさん
08/04/01 01:34:29
正確にはテスト駆動じゃないけど、
ある程度の規模になったら、ユニットテストをやらないなんて
考えられないよ。

修正があるたびに同じテストなんてやってられない。
それこそ時間がかかる。

510:nobodyさん
08/04/01 02:09:46
Selenium IDE これいいね。これだけでも同じテストする必要がないし
なんといってもテストが楽


511:nobodyさん
08/04/01 12:33:08
Yahooが占いコンテンツ制作にCakePHPを採用

512:nobodyさん
08/04/01 20:20:10
なにこの寂びれぶり

513:nobodyさん
08/04/02 00:32:30 Ldo05SB7
んじゃ、おれがこのスレを潤わせてやるぜ
ビヘイビアって使ってる?

514:nobodyさん
08/04/02 00:38:10
>>512
荒らしが去ったので落ち着いただけ。

CakePHPを使って、ようやくサイトを公開できた。
思ったより使いやすいね、CakePHP。

515:nobodyさん
08/04/02 03:09:53
コンポーネント、ビヘイビア、ヘルパーの中では
ビヘイビアを一番使うな。

よくよく考えると、ソフトウェアの中心はモデル。
その中心の共通処理なんだからよく使うのは当たり前か。


516:nobodyさん
08/04/02 11:07:25
>>515
ソフトウェアの中心はコントローラー
なぜならコントローラーはモデルとビューにも指令を出すが
モデルは、たいていコントローラを介してのやりとりになるから

そういう考えで行けば、よく使うのはコンポーネントじゃないとおかしい

517:nobodyさん
08/04/02 11:18:11 Ldo05SB7
>>516
アフォがあらわれた

518:nobodyさん
08/04/02 11:57:50 KzinrGTW
findCount()で count(distinct hoge) を指定したいのですが
それは、findAll() でやるべきなのでしょうか?

519:nobodyさん
08/04/02 12:05:53
うん。アフォだ。ワロタw

コントローラなんて所詮インターフェースに過ぎんよ。
実際の処理じゃなくて、ブラウザから引数を受け取って
それを少々加工してモデルに渡す。
またモデルから受け取ったデータを少々加工してビューに渡す。

流れとしてはこんな感じだね。

「ブラウザ」→「コントローラ(加工)」→「モデル(実際の処理)」→「コントローラ(加工)」→「ビュー(HTML出力)」

っていうか、このように作らないとテストがしづらいったらありゃしない。

SeleniumやCakeWebTestCaseがあるとはいえ、
コントローラを操作してのテストでは範囲が大きすぎる。
もっと小さな範囲でテストできるようにしないといけない。

一番重要な処理を最小限の大きさ(なるべく他に依存しない)で
テストすること考えれば、自然とこうなるはず。

520:nobodyさん
08/04/02 15:46:57
ガソリン安いな~
これほど自民党の一党独裁の問題点が分かりやすい現象は無いなw

521:nobodyさん
08/04/02 16:07:32
>>519
そうなんだ。だから本にもモデルのテストの方法しか書いてなかったんだ。
モデルよりコントローラーをテストしたいんだけど・・・ってずっと思ってた。

ということは、僕のプログラムの組み方がよくないんでしょうか。

522:516
08/04/02 16:33:04 Ldo05SB7
>>515,>>121
さきほどはアフォと一言で片付けてしまって申し訳ない、2ch流の愛情表現だと思ってくれ

で、>>519のいうとおりアプリケーションの中心となるビジネスロジックについてはコントローラなどでは
なくモデル内で実装するべき。一番大切なテストはビジネスロジックであるわけだし、モデルに集約して
(かつコントローラとのインタフェースも疎結合にして)コアロジックを実装することでコアロジックを別システムに
再利用しやすくなるというメリットも受けられる。

なので、コントローラはある意味、テストをしなくても問題ないくらい「薄い」実装にするべきだし、コントローラ
内で繰り返しよく使う処理についてはコンポーネント化してあげたほうが、ユニットテストで品質を保証できるので
良いかと。

こんな感じで考えていますが、どうでしょう?

523:nobodyさん
08/04/02 16:44:10
>>519
Seleniumこれだけあれば、全く十分なんだが
これ以外でテストしようとすればコストかかるだけやろ
どんくさい作業してんな、赤字やろ?

524:nobodyさん
08/04/02 16:50:49
>>522
だから何ってかんじだが、それがどうしたんだよ
リファレンスに書いてあるようなこと、なんで必死に訴えてるのwww



525:nobodyさん
08/04/02 16:52:59
自演厨きたー。うぜえええ

526:nobodyさん
08/04/02 16:56:38
Seleniumなんかでテストしたら時間(=コスト)がかかるよ。
ブラウザを起動する為、そもそも動作が遅いってのもあるが、

Seleniumだといくつものモジュールが組み合わさった状態で
テストするしかないから、どこのバグがあるのか見つけにくい。

またデータの初期化などが出来ない。
途中で内部のデータを調べることも出来ない。

CakePHPにはSimpleTestでブラウザをエミュレートした状態の
テストもできるので基本はそれを使ったほうが良い。

Seleniumを使うとしたら、SimpleTestではできない
JavaScriptが絡んだ処理のテストぐらいだな。

527:nobodyさん
08/04/02 16:58:43
リファレンスに書いてあるようなことなのだから、
間違いではないということだなw

528:nobodyさん
08/04/02 17:01:36
>>522
アプリケーションの中心となるビジネスロジックて何?
どんなロジック?

一番大切なテストてどんなテスト?

>>モデルに集約して
(かつコントローラとのインタフェースも疎結合にして)コアロジックを実装

プラグインと違うの?

>>なので、コントローラはある意味、テストをしなくても問題ないくらい「薄い」実装にするべき

モデルとビューに命令出すのに薄い実装なんて物理的に無理
モデルはカラッポでOK


529:nobodyさん
08/04/02 17:04:44
>>526
ブラウザ上でテストするだけなのにモジュールとか関係ないしwww
JavaScriptテストやるなら加工しないと出来ないだろwww


530:nobodyさん
08/04/02 17:05:56
>>526
Selenium使ったことないやろ?正直にいえ

531:nobodyさん
08/04/02 17:08:00
SimpleTestの方が時間かかるよ

532:nobodyさん
08/04/02 17:08:48
内部のデータを調べるようなテスト時間かかるに決まってるやろ


533:nobodyさん
08/04/02 17:09:00
また、例の嵐だな。

534:nobodyさん
08/04/02 17:09:39
とりあえず言っておくけど、CIは糞だから、
糞スレでやってねw

535:nobodyさん
08/04/02 17:13:49
>>532
たしかに!

536:nobodyさん
08/04/02 17:16:18
>>522
日本語でおk

537:nobodyさん
08/04/02 17:18:56
なんか、CI普及の為(?)にわざとアフォなことを言っている気がする。
いや、まて、わざと悪い例を出しているのか?

まあ、訂正している俺は考えをまとめられていいけどな。
(そして訂正している文を見て学習する人もいるだろう)

> モデルとビューに命令出すのに薄い実装なんて物理的に無理
> モデルはカラッポでOK

コントローラが出す命令はすごく小さなものだよ。
モデルに対して、「データ取って来い!」「書き込め!」「削除しろ!」
そして、「複雑な一連の処理をしろ!」

前三つは、CakePHPの自動生成コードでも書いてあるから
簡単にわかると思うけど最後の「複雑な一連の処理をしろ!」を
モデルに書くべきってことをわかってない人が多いんだよね。
複雑な一連の処理をコントローラに書いてしまう。悪い例だ。

538:nobodyさん
08/04/02 17:27:44
>>537
テストのことを考えていってんの?俺はテストはブラウザでしかしないからw

539:nobodyさん
08/04/02 17:29:17
テスト中心に設計するならモデルに詰め込めるだけ詰め込めばいいんじゃね

540:nobodyさん
08/04/02 17:30:57
>>537
複雑な一連の処理を具体的に述べよ
はなしはそれからだ

541:nobodyさん
08/04/02 17:32:26
where が入るような条件文はモデルに書けばいいの?

542:nobodyさん
08/04/02 17:33:42
>>537
モデルにもっていっていいのは
どこからどこまで?

543:nobodyさん
08/04/02 17:45:27
>>537
いくら給料もらってんだよ
俺はPHPプログラマで36万円

544:nobodyさん
08/04/02 17:53:38
 
 
 
モデル上で別のモデルのデータ取得できなくね?
 
 
 

545:nobodyさん
08/04/02 17:55:24
>>542
どこまでをモデルでやるかは結局設計しだいだけど、

>>541
ユーザーがフォームからの条件入力。URL形式での条件入力
、つまりコントローラのアクション関数の引数に入る場合。

その引数をもとにモデルを呼び出すわけだけど、
このときのモデルの関数は汎用的なfind関数でもいいし、
もっと簡単に扱いたければ、モデルに専用の関数を作って呼び出す。

汎用的なfind関数を使う場合には、array('key' => '= ' . $value)なんて
条件データに加工しないといけないよね? これがコントローラの処理。

モデルに専用の関数を作る場合、もっと簡単に使える関数にするね。
もちろんその場合、モデル内部でfind関数を使うことになるだろうし、
そのための条件の加工もモデルに書く。

ユーザーの入力した条件が、POSTでくる場合は、
$this->dataから条件を作り出す所までもうちょっと
コントローラでやる仕事が増えるだろう。

それでもコントローラの処理(モデルを呼び出すところまで)はこれだけ。
俺ならこのように作るよ。

あとモデルから戻ってきたデータを、ビューで使いやすいように
単純化するのもコントローラの仕事だね。

546:nobodyさん
08/04/02 17:59:00
>>544

> モデル上で別のモデルのデータ取得できなくね?

モデル上で別のモデルのデータを使用したいと思ったとき、
その二つのモデル間には関連性がある。

つまりアソシエーションを定義している。
アソシエーションを定義しているのなら、
モデル内で、別のモデルを呼び出すことが出来る。

Model1の中から、$this->Model2->findAll(); 感じで呼び出せる。


547:nobodyさん
08/04/02 18:01:31
>>545
モデルから戻ってきたデータを、ビューで使いやすいように単純化

数字にコンマ付けたりとか?

548:nobodyさん
08/04/02 18:02:43
>>546
そのやり方はCakePHPで推奨されてる方法なの?

549:nobodyさん
08/04/02 18:05:48
>>546
わざわざアソシエーションするの?
いつも結合されて重くなるじゃん

550:nobodyさん
08/04/02 18:06:46
>>547
それは見た目を変えるだけだからビューの仕事だろうね。

モデルから戻ってきたデータとは、汎用的なfind関数の場合、

$data => array(
 モデル名 => array(
  フィールド名1 => 値1,
  フィールド名2 => 値2,
  フィールド名3 => 値3,
 )
)

こんな値が返ってくる。もちろん、これをそのまま
ビューに渡してもいいんだけど、これじゃあビューで使いにくい!
って言う場合加工する。

そんな場合あるのかって? 余り無いだろう。
そう、だからコントローラの仕事は少ない。

モデルから取得した値をビューに渡す$this->set(・・・) は
コントローラの仕事ね。

551:nobodyさん
08/04/02 18:07:42
>>549
必要なときにつけたりはずしたりする方法は、何度も既出

552:nobodyさん
08/04/02 18:11:37
>>548

だめなのか?

553:nobodyさん
08/04/02 18:12:12
>>546
なんでモデルでやるの?そのメリットは?

554:nobodyさん
08/04/02 18:21:49
>>553
もちろん、直接関係が無いモデルは別々に
アクセスするよ。

モデルというか処理の内容から考えて
一つであるべきと思う場合は一つのモデルでやる。

あと、トランザクションの為のメソッドが
モデルにあることも興味深いよね。

一連関係ある処理は一つのモデル内で完結させるものと
考えると、なるほどと思わない?

555:nobodyさん
08/04/02 18:23:17
>>546
モデルは複雑にすべきじゃないよ。な中規模設計したとき
アソシエーションで必ず問題起きそう



556:nobodyさん
08/04/02 18:27:56
>>555
その意見はわからないでもないが、

普通にRDBMSを正規化したとき
そういう関連(リレーション)は出来るもんなんだが・・・

RDMSを正規化すると複雑になってしまう。それがいやだから
それを解決する為に、O/Rがあるんだと思うぞ!

557:nobodyさん
08/04/02 18:28:26
×RDBMSを正規化したとき
○RDBMSでテーブルを正規化したとき

558:nobodyさん
08/04/02 18:32:44
>>546
ページ数が増えたとき、コントローラを増やすことができるけど
コントローラが増えた分モデルを増やすこと出来ないよ。
ひとつのモデルに書くコードが恐ろしく増えるね


559:nobodyさん
08/04/02 18:34:17
また例の馬鹿か?

560:nobodyさん
08/04/02 18:35:56
> コントローラが増えた分モデルを増やすこと出来ないよ。

言っている意味が、よくわからないんだが・・・

例えコントローラが無くてもモデルは作れるし、
一つのコントローラで複数モデルを扱うことも出来るんだが?

561:nobodyさん
08/04/02 18:43:36
全てはコントローラに処理を詰め込み過ぎたscaffoldが悪い。
あれがアフォに勘違いを植え込む。

562:nobodyさん
08/04/02 18:49:12
うーん、自動生成のコードとしては、これしかやりようがない所もあるのだろうけど、
コントローラに処理を詰め込みすぎというか、モデルに処理が何も無いのが
いけないんじゃないかな?

あれじゃ、単にテーブルに直接アクセスするネイティブな関数の
代わりのクラスにしか見えない。

一番、プログラマがいろいろ書くべきなのはモデルなのに。
逆に言えば、いろいろ書かないといけないものだからこそ
自動生成ではモデルに何もないんだろうね。
でもサンプル程度はほしいかも。

563:nobodyさん
08/04/02 18:53:30 KzinrGTW
debugを1以上にするとHTMLの一番最後に
<!-- 0.0012s -->
みたいに、生成時間?のコメントがつくんですけど
これを付けないようにするにはどうすれば良いんでしょうか?
debugは1にしておきたいです。

564:563
08/04/02 18:58:51
あ、webroot/index.php にありました。

565:nobodyさん
08/04/02 19:00:37
cakephpで作られたオープンソースみても
モデルで書かれてる処理はバリデータ関係の関数しかないんだけど

URLリンク(code.google.com)

566:nobodyさん
08/04/02 19:00:38
>>564
Do not changeって書いてあるけどねw

567:516,522
08/04/02 19:01:23 Ldo05SB7
ん?なんかいろいろゴチャゴチャしてきたけど、結局俺が主張してたことは正しかったのか・

「複雑な一連の処理」とかビジネスロジックとかって、たとえば俺の場合は
 ・①日足の株価を取得してRSIを計算する
 ・②与えられた条件引数に該当する銘柄の証券コード配列を取得(スクリーニング)
 ・③現在の株価を受け取り、あらかじめ計算しておいた目標価格の条件を満たすか判別
   ⇒・更に条件を満たしていれば、買い/売り注文をWEBサービスに投げる処理も「証券会社モデル」(仮称)というDBと連携しないモデルを作成して、HTTP(S)で注文するメソッドを書いてる。
 ・④現在の株価を取得する(楽天証券のRSSをDDE接続経由で呼び出すモジュールを別途使用)
みたいなアプリが持つほとんどの主要処理を言ってて、これらをモデル(またはビヘイビア)に記述するべきと思うのです。

逆に言えばコントローラは、
 ・④の「現在の株価を取得する」メソッドからの返し値をそのまま③「株価と目標を評価し、注文する」メソッドに引渡し仲介する
 ・ビューからリクエストがあった①などの計算処理をモデルメソッド①に引き渡す
 ・スクリーニング対象銘柄の証券コードリストを取得し、そのまま②のスクリーニングメソッドに引き渡す。
くらいのことしかしていない。人間の世界でいうと「仲介人」かと。


568:nobodyさん
08/04/02 19:06:54
>>565
お前の目は節穴か・・・

ってかこのソースあまりいいとは思えないな

569:nobodyさん
08/04/02 19:08:08
OpenFLP
Rails 製のオープンソース版 Fastladder

モデル 382steps
コントローラー 910steps

コントローラーに処理書きまくってるんですが。。。


570:nobodyさん
08/04/02 19:09:00
じゃあ本家railsのソースコードみせてやる

571:nobodyさん
08/04/02 19:11:13
コントローラに処理を詰め込みが正論か非か
オープンソース見れば、すぐわかることだからな

572:nobodyさん
08/04/02 19:15:29
オープンソースといってもその質はピンキリだから

> じゃあ本家railsのソースコードみせてやる
おいっ! railsはフレームワークだ。
もともとビジネスロジックは含まれてない!

573:nobodyさん
08/04/02 19:18:52
>>567
全部コントローラで出来るし
それをCakePHPでやる意味がわからんw

574:516,522
08/04/02 19:46:05 Ldo05SB7
>>573
あー、「全部コントローラで出来るし」って言ってる時点でプロフェッショなるじゃないことが確定www
議論しても理解できないんだろうな、「できる/できない」ということと「(プロとして)やるべき/べからず」
といった本質的な点をwww

コントローラでも全部やろうと思えばできることくらいわかっとるわいwww

575:nobodyさん
08/04/02 19:58:32
>>574
CakePHPでやることじゃないことは確かwww

576:nobodyさん
08/04/02 21:14:45
ビジネスロジックはモデルに集約すべき
議論としては面白い
俺もその辺気になってた


まあ俺はbakeしたコードの拡張から入ったクチだから全部controllerに書いちゃうけどなwww

577:nobodyさん
08/04/02 21:37:43
>>576
俺もコントローラに書いてしまったけど、
作り続けていくうちに、なんか無理が出てくるんだよ。

なんでこんなに作りづらいんだ?って思っていたときに
このスレにあった、ケーキの絵。あれで悟りを開けた気がする。
あぁモデル中心でやればいいんだって。

578:nobodyさん
08/04/02 21:58:22
>>577
その絵ってどれ?

579:nobodyさん
08/04/02 21:58:46
>>562
モデルに書けって言うけど、何を書くの?
関数で書けばいいの?モデル内のメソッドとして?

>>565
の言うとおり、実例も無いし具体的なメリットが分からない。
今のところテストが楽って事はなんとなく分かった。

580:nobodyさん
08/04/02 22:16:06
>>578
これの3ページ目
URLリンク(cakephp.org)

581:nobodyさん
08/04/02 22:19:41
> 関数で書けばいいの?モデル内のメソッドとして?

モデル = ビジネスロジック用のクラス
なんだから、言うまでも無くメソッドだろ

582:nobodyさん
08/04/02 22:22:03
>>580
ありがとう,でもコントローラーよりモデルに重点おけよという一言で済む話かw

583:nobodyさん
08/04/02 22:26:19
>>581
そうすると、どう幸せになれるわけ?

584:nobodyさん
08/04/02 22:27:49
>>583
どう幸せになるかではなく、
どう幸せになりたいか。

貴方はプログラミングする上で、どうなったら幸せだと感じる?

585:nobodyさん
08/04/02 22:57:59
railsはコントローラーに重点を置くようになってるのではなぜ?

586:nobodyさん
08/04/02 23:14:04
>>574
自分の安価間違ってね?516と522で筋が通ってない

587:nobodyさん
08/04/02 23:53:19
>>585
railsでもモデルが一番重要なものですよ。

588:nobodyさん
08/04/03 00:17:09
モデルが一番重要なんてCakePHPだけの話
松本に話したら鼻で笑われたよ

589:nobodyさん
08/04/03 00:38:13
松本といっても鼻の長いゾウをキャラクターにしている会社の松本だけどなw

590:nobodyさん
08/04/03 00:48:42
でもキリンさんも好きなんだろ?

591:nobodyさん
08/04/03 10:10:52 Z1Ohe4yI
ビヘイバ話はおわったのか?

592:nobodyさん
08/04/03 11:26:08
Model は特定の環境に依存しない処理を行う部分である。

593:nobodyさん
08/04/03 12:10:16
たとえばの話なんですが、
1.フォームから画像ファイルをアップロード
2.アップロード結果・画像ファイルの不正検知
3.2が成功時、元画像名をmd5したものをuploadsフォルダに保存
4.3のファイル名をimage_fileカラムに格納
という一連の処理があったばあい、
今現在はコントロールとコンポーネントに書いてますが、
モデルとビヘイビアに書くとしたら、
2->バリデータに記述
3->ビヘイビア
4->モデル
という感じなんでしょうか?


594:nobodyさん
08/04/03 12:26:23
ビヘイビアて1.2からだろ、
最初から無いってことは必要性が薄いてことだよな


595:nobodyさん
08/04/03 12:32:04
ソースが読みやすければコントローラーで全部書いてもいいし
モデルに書いて読みにくくなるなら、書かない方がいい
結局はソースを読みやすくするために分けてるだけの話


596:nobodyさん
08/04/03 12:32:23
画像アップロードできるビヘイビアあるよ。
正確には画像を保存できるビヘイビアだけどね
URLリンク(bakery.cakephp.org)

597:nobodyさん
08/04/03 12:50:28
結局はソースを見やすくする為にある。
一番見やすいソースとは、なるべく何も書かないこと。

画像をアップロードして保存というのは、本質的には
テーブルに画像フィールドを作ってそこに格納することと変わらない。

だからフィールド追加作業以外は、一切処理を変更しないで
作れるというのが一番理想的。

ビヘイビアを使えば、>>596のようにActsAsにわずかなフィールド情報を
設定して終わりだけど、その他の方法でここまでスマートに作れるかな?

598:593
08/04/03 13:32:44
>>596-597
ありがとうございます。
こりゃ1.2にチャレンジしなきゃだな

599:nobodyさん
08/04/03 13:49:15 Z1Ohe4yI
>ビヘイビアて1.2からだろ、
>最初から無いってことは必要性が薄いてことだよな

正確には1.1の頃からビヘイビアのディレクトリは用意されてたんだよな。
おそらく必要性はあったのだけど、1.1.xのステイブル版までに実装できなかっただけなのでは?


600:nobodyさん
08/04/03 14:22:02
railsにはビヘイビア相当になるものが無いんだが、どうして

601:nobodyさん
08/04/03 15:14:18
ビヘイビアてベネズエラにいる俺の愛人と同じ名前だ

602:nobodyさん
08/04/03 15:38:42
>>600
Rubyではmixinという言語機能でビヘイビア相当のことが出来るから。

603:nobodyさん
08/04/03 17:41:48
マニュアル»CakePHPによる開発»Models»Introduction
URLリンク(book.cakephp.org)

> Model behaviors provide a way to mix in functionality

へぇ、behaviorsはmix-in的な機能を提供するものだったんだ。なるほど。

604:nobodyさん
08/04/03 18:10:28
>>603
きちんとした日本語訳サイトあるのに。。。

605:nobodyさん
08/04/03 18:23:11
>>604
どこに?



606:nobodyさん
08/04/04 20:03:22 GG6uDHIa
わっふるわっふる

607:nobodyさん
08/04/05 04:54:50
cakeでのMC棲み分け例としては以下がありますよね。
個人的にはいい感じだと思いましたが、どうでしょう?

CakePHPを使ったMVC設計のベストプラクティス
URLリンク(www.sooey.com)

608:nobodyさん
08/04/05 05:21:49
MVCモデルのMが重要なのはデータ加工の多いWEBだけのはなしであって
MVCモデル全般的な考えではない


609:nobodyさん
08/04/05 05:24:58
データをあまり使う必要のないWINアプリを
MVCモデルでわけた場合はCが中心となる

610:nobodyさん
08/04/05 09:45:41
Web用のフレームワークのスレで何言ってんだこいつw

611:nobodyさん
08/04/05 15:00:48
MVCのVが重点となるソフトをあげてみよ

612:nobodyさん
08/04/05 15:07:51
rails発のMVCモデルはMがDBと密接な関係であるが
最強のモデルとは思っていない。
最適なモデル構造というには、まだまだ完成度が低いとrails作者は言っている


613:nobodyさん
08/04/05 15:49:00
>>607
面白いけど
これ通りに書いたら一覧性下がりそうだな
大規模なら修正には強くなりそうだね

まずは体に叩き込んでみるのがいいのか

614:nobodyさん
08/04/05 20:57:16
>>611
> MVCのVが重点となるソフトをあげてみよ

静的なウェブページ

615:nobodyさん
08/04/07 17:32:08
ゆくゆくはcake使いたいけどあと8時間くらいしか時間ないし
今は勉強してる暇も無いからとりあえず平で書く
ってときに、最低限これだけ守ってコード書いとけば
あとでcakephpを使いたくなってもまあなんとかなるよ という
ポイントを教えて

616:nobodyさん
08/04/07 17:50:23
Cake同様のライブラリが揃ってるってなら、そんな事も可能だと思うが・・。
無理じゃね

617:nobodyさん
08/04/07 18:06:48
データベースの主キーはIDだけにしておく

618:nobodyさん
08/04/07 18:28:13
それはコードなんだろうか
とにかく規約ぐらい把握しないと無理だよね
結局出来るのはDBの設計ぐらいじゃないかと

コードも処理部分は多少使いまわせるだろうけど

619:nobodyさん
08/04/09 22:36:27 0zi6cM/k
CakePHP内でfindAll、findAllByを使っていますが、重いのでチューニングできないかと
考えています。

それで、実際に発行されているSQLと、可能であればアクセスパスを確認したいの
ですが、なにか方法がありますでしょうか。

620:nobodyさん
08/04/09 23:44:43
デバッグモードを2に変更。実行したsqlが見れます

621:619
08/04/10 00:04:23 ysAxvq3P
>>620
確認できました! ありがとうございます。

622:nobodyさん
08/04/10 10:23:53
Model->query()で以下のようなSQLを発行すると
$sql = <<<EOF
  SELECT
    `Foo`.`id`,
    SUM(`Bar`.`hoge`)
  FROM `bars` AS `Bar`
  LEFT JOIN `foos` AS `Foo` ON (`Bar`.`foo_id` = `Foo`.`id`)
  WHERE `Foo`.`id` IN (1, 2, 3, 4, 5)
  GROUP BY `Foo`.`id`
EOF;

連想配列の添字がおかしくなるのですが、回避はできないのでしょうか

array(
  '0' => array(
    'Foo' => array('id' => ***)
    '0' => array('SUM(`Bar`.`hoge`)' => ***) ←ここ
  )
  .
  .
  .
)

623:nobodyさん
08/04/10 10:42:01
>>622
なんかqueryなんか使わないで、find()で出来そうな気がするんだが?
queryだとRDBMSごとの違いを吸収できないことがあるのでお勧めしない。

んで、試してないんで間違っている可能性が高いんだが
$sql = <<<EOF
  SELECT
    `Foo`.`id`,
    SUM(`Bar`.`hoge`) as `Bar`.`hoge`
以下同じ

じゃだめかな?

内部的には帰ってくるデータのフィールド名がどうなっているかを判断して
連想配列に入れているようだから、SUM関数とか使うとフィールド名が
CakePHP的に想定外になる。それが原因じゃないかな?

ちなみに、この、 as `Bar`.`hoge`の文字列の部分がRDBMSによって違うので
考えなしに使ってしまうと、RDBMSごとの違いを吸収できなくなる。
(たしかPostgreSQLだとas Model__Field)
もちろん、MySQLにだけ対応していればいいのなら、問題ないけどね。

624:nobodyさん
08/04/10 11:29:33
>>623
レスありがとうございます
alias噛ませる方法は私も試してみたのですが
FROM `bars` AS `Bar`の宣言と被っているためエラーが返ってきます。

hasManyで繋がっている集計先テーブルの条件指定なども追加したい場合
CakePHPの作法だとどのようにするべきなのでしょうか?

625:nobodyさん
08/04/10 11:53:32 BE:39571564-2BP(2)
参照の参照がうまくいかない。
たとえば、PostのViewにユーザ名だけでなく、そのユーザが所属するグループ名を表示したい場合、どうすればいいんだろう?
Post.id
Post.user_id-参照→User.id
      ←取得-User.username
          User.group_id-参照→Group.id
      ←取得----------- Group.groupname

User.usernameを表示する場合は、$post['User']['username']でいけるっぽいけど、
じゃあ、そのユーザのグループ名はどうやって取得すればいいんだろう?

他にも、グループ名のリンクをクリックしたときに、そのグループに所属するユーザ
(User.group_idの値がGroup.idの値と等しいユーザ)User.usernameの一覧を作成するときとか
どのように書けば良いんだろうか?

MVCにしろ、SQLにしろ始めたばっかで全然わからないや。

626:nobodyさん
08/04/10 15:04:31
>>625
Post -> User -> Group という順番に適切なアソシエーションが設定されていれば、芋づる式にデータは取ってこれる。

やってるけど分からないなら>>620が書いているように、デバッグモードをonにしたほうがいい。

その質問の仕方だと、何をどこまでやって分からないのか分からない。

627:nobodyさん
08/04/10 22:22:07
>>624
とりあえず、
SUM(`Bar`.`hoge`) as `sumhoge`
これだと、
Array([0] => Array([0] => Array([sumhoge] => 6)))
となるよ。


まとめて書くなら、
$query = array(
'conditions'=>array(
'Foo.id'=>array(1,2,3,4,5),
'1=1 GROUP BY Foo.id'
),
'fields'=>array('Foo.id','SUM(Bar.hoge) as sumhoge')
)

$this->Bar->find('all',$query);

って感じかな

628:nobodyさん
08/04/10 22:25:44
まあ、SUMつかったせいで、
どこのモデルのデータかという情報が消えてしまい、
0という名前のモデル名になるってだけで
おかしいわけじゃないんだけどな。

今回はBar.hogeのSUMだからモデル名はBarになるべきだと
思うかもしれないけど、SUM(`Foo`.`hoge` + `Bar`.`hoge`) という
書き方だって出来るわけだし。


629:nobodyさん
08/04/11 00:29:36
なるほどなんで0になるんだとか悩んでた
しかし、扱いにくいのはたしかなんだよね

630:nobodyさん
08/04/11 01:18:44
BakeとかBakeryとかCheeseCakeなんていう、楽しげな製菓製パン用語の中にあって、
Scaffoldなんていう土建屋みたいなネーミングはいかがなものかねぇ。
いくらRoRのパクリとはいえ、違う名前でもよかったんじゃないかな。
なぁんて、チラシの裏w。

631:nobodyさん
08/04/11 01:32:12
じゃあスポンジケーキ?

632:nobodyさん
08/04/11 01:40:16
>>625

私も初心者ですが、私の場合はVIEWの最後に、

<?php print_r($post); ?>

というデバッグ出力を出して確認しながらやってます。

あ、確認は「ソースの表示」をした方が分かり易いかも。
秀丸など、UTF8等のキャラクタセットに対応するエディタが必要ですが。

633:nobodyさん
08/04/11 02:27:45
Vista以降はもう
NET Framework 3.0がWEBサイト最強のフレームワークになるな
PCのWEBサイトはC#じゃないと追いつけないわ
そしてPHPなどの下級言語は携帯サイトでしか使用されなくなる

634:nobodyさん
08/04/11 02:39:04
Windows Server 2008の発売で
asp.netの注目度がかなり上がってる
どう考えてもPHPから3Dにも強いasp.net(C#)に移行するだろうな

635:nobodyさん
08/04/11 02:40:09
CakePHPなんてやってる場合じゃないぞ
時代遅れ君たち

636:nobodyさん
08/04/11 04:43:59
なんだ? いきなりこいつは? 話ズレまくりで滑ってるな。

637:nobodyさん
08/04/11 04:57:27 OBoZ/5C8
>>635
代わりに、なにがいま時代の最先端なの?

638:nobodyさん
08/04/11 13:47:57
世間で何が流行ろうと、CakePHPはCakePHPでいいじゃん。

別に、すでにCakePHPで作ったものをC#に置き換える必要は
ないんだし。

639:nobodyさん
08/04/11 15:17:40
C#で作ったって動かないサーバーが多いしな。

640:nobodyさん
08/04/11 17:09:12
先輩がた教えて下さい。

mysql の max 関数を使うには cakephp ではどのようにすればよいでしょうか。
よろしくお願いします。

641:nobodyさん
08/04/11 22:44:28
$this->モデル名->クエリ(SQL文、false);

642:nobodyさん
08/04/11 23:41:35
queryは普通使わないだろw
findといえ

643:nobodyさん
08/04/12 13:37:27
>>642
自分も、するんだったらクエリ発行するしかないと思ってたんだけど、
使った事がないので書かなかった。

findでmax関数ってできるの?

644:nobodyさん
08/04/12 14:39:58
>>632

<?php echo pr($post) ?> がおすすめ

645:nobodyさん
08/04/12 15:57:22
>>643
$this->Model->find('all',array('fields'=>array('MAX(id)')));


>>644
<?php pr($post) ?>でいいよ

646:nobodyさん
08/04/12 16:42:32
cakeって、queryを使ったら死刑!くらいの気持ちが無いと駄目なの?

647:nobodyさん
08/04/12 19:44:31
だってqueryってSQL直で発行だよ?
せっかく、CakePHPのデータベース用ドライバが、
RDBMS間の差を吸収しているのに
フレームワーク使っている意味半減するじゃん。

648:nobodyさん
08/04/12 21:28:23
>>635
ある意味正解!だがまだ時代が追いついてきていない。

やっぱO/Rマッピングでは無理があるということだ
C#も3.0の言語仕様拡張で突き抜けた感があるしね
LINQとかラムダ式とかJavaの真似っこでない次元に到達した。

でも現状は糞言語PHPで本当に馬鹿みたいなコーディングするしかないけどな。

649:nobodyさん
08/04/12 21:50:24
>>648
中身がまったくない。知っている用語を羅列しただけ
自作自演の可能盛大。0点。出直しましょう。

650:nobodyさん
08/04/12 21:53:16
>>647
>> RDBMS間の差を吸収しているのに

一つのシステムに複数のRDBMSを跨ぐ様な事なんて殆どないけどな。
まぁ、極力queryを使わないほうがいいのは同意。


651:nobodyさん
08/04/12 21:55:24
同じコードで、いろんなデータベースに
対応できるってことを言っているんだろ。馬鹿か。

652:nobodyさん
08/04/12 22:14:35
素直にRailsつかったらいいのに

653:nobodyさん
08/04/12 22:22:03
railsかぁ。二年ぐらい前なら、それだけの価値はあったかもしれないが。

654:nobodyさん
08/04/12 23:15:20
DBにべったりガッツリ依存しまくってるフレームワークってないのかな
割り切った設計で可能な限り使いやすさと速度の両立を目指すという


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch