14/01/26 02:32:12.27
>>848
とっ散らかるのイヤだなーとモデルごとに置いてて、今まで特に問題は起きてないけど
Lib層の使いこなしは考えていきたいね
ロジックはMVCで分けても、定義まわりは汎用的に使いまわしたいこと多いしな
850:nobodyさん
14/01/26 02:51:45.24
マジか!もうvar使わないのか。
時代が流れるの早いなー!
851:nobodyさん
14/01/26 03:30:04.12
>>847
いや、>>840 が言ってるのは Component のオブジェクトプロパティを
直接指定できないかってことでしょ。
で、フレームワークが $components の内容を参照して勝手にセットする
しか方法がないのかってことにイラついてるんだろ。
852:nobodyさん
14/01/26 04:22:27.54
>>851
ああそういうことか。
じゃぁ
$this->Foo = $this->Components->load('Foo');
853:nobodyさん
14/01/26 04:25:33.67
>>850
おいおい、俺がこの業界にまだ入りかけで、アルバイトでPHP書いてたときですら、
アクセス修飾子書いてたぞ。
もう5年以上は前の話だ。
854:nobodyさん
14/01/26 04:51:42.85
>>853
PHP歴、俺は10年以上だな。おっさんだ。。。
プログラムだけは経験多くても新しいのについてけないとダメだな。
var でも privateでもpublicでも何も変わらん気がするんだけどどうなん?
で、varが3文字で無難だからという理由で使ってるんだけど。
教えてください。
855:nobodyさん
14/01/26 05:06:46.50
>>854
テスト書いてる?
変えちゃいけないインターフェース(public){=テストする}と
変えてもいい内部でだけで使うメソッド(private){=テストはpublicメソッド経由で行う}を
varでどうやって区別するんだい?
どっちでもちゃんと動くからいいというものではなく、
重要なのは、コードに"意図"を記述できるかどうかだよ。
856:nobodyさん
14/01/26 05:09:49.74
>>855
すげー!
そんな違いがあるのか。
勉強になりました。
テストは書いてないです。
ありがとう。
857:nobodyさん
14/01/26 05:21:51.60
>>854
アルバイトが長かっただけで俺もそれなりにおっさんだけど。
varで書かれたコードは見た目が気に食わない。
というのも、varは互換性のためpublicと同じになるから、
private, protectedが使えないわけだけど、
JavaScriptみたくアクセス修飾子がないけどうまくやってる言語もあったりするから。
とはいえ、途中参加のPHPプロジェクトに入ったりしたら、既存のコードを読むときに、
publicなのかそうじゃないかは、コードを読むときに手がかりにするし、
というかpublicメソッドだけ追ったほうが概要がつかみやすいと思う。
まぁ、1人で作ってたり少人数チームだったりすると、アクセス修飾子なんてなくても、
なんとなくわかったりするし、privateには _ つけるといった運用カバー的方法もあったりするし、
どうしても徹底しないととは、正直言いづらい。
だから、見た目が気に食わない。
858:nobodyさん
14/01/26 09:20:27.99
>>854
varもpublicも変わらんというならまだしも、
privateとpublicが何も変わらんと思ってるってことは、手続き型しかやってなさそう。
テストの無い数千行の神クラス・・・。
859:746
14/01/26 10:00:51.56 2eFTwFkL
>>847
> >>840
> PHP初心者なのか。
PHPもCakeも3ヶ月くらいしか経験はない
練習で掲示板を作ったくらいだ
>
> class Foo{
> public $foo = 1;
> public function bar(){
> return $this->foo;
> }
> }
できるんだな。サンクス
今作らされてる仕事でコントローラーばかりにコードを書くとクラスが肥大してヤだから
URLから呼ばれるコントロールをFacadeにして個別機能を小さくクラスわけて new したいな、
と思ってる所なんだ
860:nobodyさん
14/01/26 10:25:55.73
>>859
じゃぁ
コントローラをFacadeにするのは正解。
ビジネスロジックを別クラスにするのも正解。
一般的に、ビジネスロジックはModelに書くのが良いとされている。
一つのModelばかりになんでも詰め込んで肥大化させるのはあまり良くない。
複数のモデルで共通する振る舞いはBehaviorを作るのが正解。
Modelとテーブルの関係を外して新たなModelを書くのはOK。
Libに新しいクラス作ってもいいよ。
ってところ。
861:746
14/01/26 10:42:05.01 2eFTwFkL
>860
ありがとう。少し光が見えてきた
862:nobodyさん
14/01/26 12:35:40.50
作るものにもよるかもしれんけど、コントローラーやモデルに、
そんな沢山書かないとな場合て、そんなにないよな。
もしそうなら、コントローラーも、新たに作ったコントローラーもモデルも、
数行しか書いてないみたいには、しないほうがいいと思うよ。
find2回して、片方をforeachでまわしてちょっと加工して、
あとは表示なんてのは、そのページでしか使わないんだったら、
もうコントローラーに書いておけばいいと思ってる。
863:nobodyさん
14/01/26 12:57:42.83
>>862
それだと、テストが難しくなる。
864:nobodyさん
14/01/26 13:08:34.52
>>863
すべてをテストする必要はないんじゃね。
find2 foreach1だけなら、ほぼ間違えないし、
テスト可能にする事も含めて、テストのコストのほうが高いと思う。
foreachの中身が1行2行という想定だけど、
もしこれが複雑なものなら、foreachのとこだけ切り出してテストできるようにはしてもいいと思うけど。
865:nobodyさん
14/01/26 15:09:54.48
>>860
Cakeって案外不親切だよな
自由度が高いといえば聞こえはいいが
866:nobodyさん
14/01/26 17:52:52.45
CakePHPは自由度高くないでしょ
867:nobodyさん
14/01/27 08:26:21.27
2014年にもなって「varって何が悪いの?」レベルのことを言う経験10年って・・
不勉強とかそういうレベルじゃねーだろ
868:nobodyさん
14/01/27 09:15:59.49
化石だな
869:nobodyさん
14/01/27 10:27:59.61
(俺も正確に理解せずに使ってた、なんて言えない・・・)
870:nobodyさん
14/01/27 13:43:50.37
var使ってますってのは
私はいまだにOOも理解してない手続き型しか書けない老害です
って宣言と同義
871:nobodyさん
14/01/27 17:32:39.84
アクセス権はOOに必須ではないがな
872:nobodyさん
14/01/28 09:32:01.09
カプセル化はOOのキモだと思う
873:nobodyさん
14/01/28 11:26:46.25
そりゃそうだ
874:nobodyさん
14/01/28 12:09:08.34
全部publicにstaticに…ってただのファイル分割だわ
そういやそんなおじさんがいたな…
875:nobodyさん
14/01/28 12:36:13.58
varおじさん
876:746
14/01/29 08:28:57.79 4MhCoapX
アクション名と違うファイル名のctpを使うにはどうしたらいいの?
アクション名がかぶりそうなんだよ
877:nobodyさん
14/01/29 08:47:04.63
Viewフォルダ内をコントローラごとにフォルダ分け
同一コントローラで名前がかぶりそうなら設計があやしい
878:nobodyさん
14/01/29 17:13:25.95
>>876
コントローラの中で
$this->render('任意の名前');
879:nobodyさん
14/01/29 22:52:44.55
かっこいいbake用skeletonどこにありますかね…
なかなか見つかりません
880:746
14/01/29 23:39:01.19 4MhCoapX
>>878
サンクス。調べてたら$layerの使い方もなんとなくわかった気がしてきた
881:nobodyさん
14/01/30 02:58:52.18
Amazonみたいにさ、
この商品を見た人は、以下の商品も見ています。
ってのを作りたい場合、どのように作ればいいか教えてもらえませんか?
882:nobodyさん
14/01/30 03:35:25.70
閲覧ページのURL、ページ遷移、滞在時間とかを取得して、
統計データから商品Aから商品Bへのスコアを計算して、
閾値を設定して、それを超えたものをスコア順に並べる
みたいな感じじゃないの?
883:nobodyさん
14/01/30 03:39:02.25
FacebookとかAmazonレベルだと複雑なスコア算出の式をしてるだろうが、
とりあえず何らかの指標で弾き出したスコアを元にリストアップってのはどこも同じはず。
884:nobodyさん
14/01/30 07:39:44.50
オライリーから、集合知プログラミングって本が出てたはず
わりとそのものズバリな内容が書いてあった
中のコードはphpじゃないけどpythonだから読みやすいし
885:nobodyさん
14/01/30 09:24:11.61
奥が深い分野だから、Amazonと同じ精度出すだけでも、
難易度相当高いよ。
886:nobodyさん
14/01/30 09:35:06.95
同じ精度出す必要無いよ。過剰実装だ。
単純に文字通り受け取って、リファラから商品IDを集計すれば良いだけだろ。
887:nobodyさん
14/01/30 10:50:07.49
>>884
881じゃないけど横からサンキュー
888:746
14/01/31 01:19:24.89 nps2dTDl
アクションとURLの関連性を任意にしたい場合、config/route.phpのRoute::connectで指定してやればいいの?
889:nobodyさん
14/01/31 09:22:20.73
>>888
おっけーです
890:nobodyさん
14/01/31 13:18:43.14
CakePHPがあまり関係ない+そんな基礎的なことをと言われそうだけど、
よく見てるスレってここくらいだし、一応CakePHP使って作るし、質問させてくれ。
入力、確認、完了というよくあるフローの投稿機能なんだけど、
入力の段階でテキストやプルダウンなどのほかに、画像アップロードがあるんだ。
確認ページでは画像アップロードは完了させて、確認できるように表示する。
完了すれば、画像は所定のディレクトリに保持されて、ファイルパスが他のテキストとあわせてDBに入る。
確認の段階で戻ったり、完了に到達しなかったら、テキストも画像も保持しない。
良くある話だとは思うけど、確認ページ+画像アップロードが、なんか久しぶりで、
さらにcronが使えないサーバーで動かす予定なんだ。
前やったときは、daily cronで完了に至らなかったケースの画像を削除してたんだけど、
その方法が使えないから、どうしたものかと悩んじゃって。
この画像の後始末って、普通どうやってやるもんなのかな?
891:nobodyさん
14/01/31 21:38:59.99
>>890
俺ならcron使えるサーバー使う。
892:nobodyさん
14/01/31 21:40:33.68
>>890
というか、いちいち俺は削除しないな。
下手に削除プログラム走らせるとバグの原因になる。
ゴミデータあっても誰も見ないし。
893:nobodyさん
14/01/31 22:07:45.62
トリガなんてなんでもええやろ
ユーザリクエストでもいいし外部Cronでもいいし脳ミソ0か
894:nobodyさん
14/02/01 01:04:49.93
乱数でハズレ引いたユーザーに負担してもらう
895:nobodyさん
14/02/01 11:45:31.12
>>890
俺は正式アップロード用のフォルダとそうでないのと分けてるよ。
後から手動で消しても大差ないし、SSHからなら一瞬だしな。
896:nobodyさん
14/02/01 12:00:34.17
今まさに正式アップロードになろうとしてるやつを手動で消さないように注意ね
897:nobodyさん
14/02/01 14:32:58.78
それは日付指定して削除すればいいだけだよね
898:nobodyさん
14/02/01 14:57:34.78
解決
しゅーーりょーー!