Laravel4のstaticコールについてのやりとり
- tanakahisateru
- 3681
- 0
- 11
- 1
頑固プログラマーとLaravel開発者のTaylor氏が、討論しています。というより、頑固だから、Facadeでスタティックメソッドも実はオブジェクト生成しているのを受け入れがたいよう。 要は、staticに見えてしまうからなんでしょう。
2013-07-24 07:49:24マジックメソッドはできるだけ使いたく無い派 / “Laravel 4 Uses Lots of Static, Not True.” http://t.co/MocYqyb4Uh
2013-07-24 10:16:06まあ面白いこと考えるよね / “Laravel 4 Uses Lots of Static, Not True.” http://t.co/XZTHB5CMKE
2013-07-24 10:26:04@tanakahisateru つ RT @shin1x1: まあ面白いこと考えるよね / “Laravel 4 Uses Lots of Static, Not True.” http://t.co/XZTHB5CMKE
2013-07-24 10:27:43@shin1x1 読んだ。やはり魔法少女ララベル。ところでどうやってモック差し込むのかわからなかったけど、ようするにインスタンス見つけてそっち使えということなのかなー
2013-07-24 10:42:49Static callを窓口にしてるだけだから、laravel4がstatic地獄みたいな印象を持つのは間違いという記事。 マジックメソッド__callStatic()を使ってそれっぽく見せてるだけ。 / “Laravel 4 U…” http://t.co/CELEUeaHuW
2013-07-24 10:49:15@tanakahisateru モック差し込むなら、テスト時はこれ書き換えることになるのかな。 https://t.co/xMPD5XIEcf
2013-07-24 10:51:51@cakephper 「それっぽく見せてるだけ」ではないと思います。内部ではstaticではないオブジェクトで構成されている部分もありますが、アプリケーションではstaticに呼び出す以外に機能させる方法が無いと認識しています。
2013-07-24 10:55:42@shin1x1 これ指してるのがクラス名だから、テストケースごとに別々なクラスファイルがいっぱい要りそうな...
2013-07-24 10:59:46@tanakahisateru 実はモック用クラスがフレームワークに用意されているとか。で、テストケースで生成したモックのインスタンスをモック用クラスに差し込むとそっちを呼んでくれるとか。(ソース見てないけど)
2013-07-24 11:03:41@shin1x1 @tanakahisateru プロダクション用Facadeがモック機能持ってたはず。。。 http://t.co/SlGAZkfky1 (コード https://t.co/2cA2hr9ugH)
2013-07-24 11:11:06@hidenorigoto @tanakahisateru @kenji_s なるほどー。この辺ですね。 https://t.co/OL81ObwAWN
2013-07-24 11:17:21Laravel4のコアのstaticが裏でインスタンス化されているということが、日英で今日は良くツイートされています。 staticメソッドのほうが、読み書きしやすが、テストはできないという点を解決するための方策です。 ですから、読みやすいと思わない人には、役に立ちません。
2013-07-24 11:25:29Laravelのファサードの仕組みは、読み書きしやすさとテスタビリティーの両立を目指しています。 コアクラスに対し、依存注入を行わなくても、CoreClass::shouldReceive('メソッド名')で、Mockeryのモックが用意されます。
2013-07-24 11:28:19ドキュメントにも軽く書かれ、日本語のブログ記事も既にいくつか存在し、テスト本と構造本でも取り上げられていますが、英語のブログ記事をきっかけに、今日は話題として取り上げられているようです。
2013-07-24 11:30:24@HiroKws 目指す意図は理解します。ですが、モックライブラリにMockeryしか使えない点、そのテストを動作させるためにLaravelコアに依存してしまう点など、標準で汎用性のある方法にはなっていないと私は認識しています。
2013-07-24 11:36:28@hidenorigoto その通りです。:D フレームワークですから。結局は好みなのです。 全てのフレームワークが、汎用性を目指しているわけでないでしょうし、少なくともLaravelの人気は、お手軽さがあってのことですしね。 依存注入でコーディングしてもいいわけですし。
2013-07-24 11:50:04@shin1x1 @hidenorigoto @kenji_s みなさんありがとうございますー。それにしてもインスタンスまでが遠いというか、モックごときにコンテナ全体を巻き込む感じというか...Laravel難しい子
2013-07-24 11:51:10@tanakahisateru コンテナで管理されているオブジェクトで、プロダクションコード内でstaticコールしているやつをモックする場合の機能ですよね。
2013-07-24 11:53:2420年くらい前でも、UIに関しては、難しさはユーザーに隠しなさい、というのはよく知られていました。 便利なライブラリー、いくつかのプログラムパターンは、内部構造を利用者から隠す目的です。 そうしたアイデアをフレームワークであるLaravelは取り入れているだけです。
2013-07-24 12:02:17@hidenorigoto コンテナでFacadeと対応してるDB::とかの単位でのみ、コールを騙せるという感じなのは見えました。
2013-07-24 12:02:56開発者のTaylorは、Symfonyのミートアップでもレクチャーしてますし、そもそもSymfonyとは方向性が違います。ですから、SymfonyからLaravelへの釣り記事は少ないです。 同じ方向性ではありませんが、お手軽さが同程度なのかCI=>Laravelは多いです。
2013-07-24 12:06:44@hidenorigoto ここだけの話(になってないけど)、スタティックコールが気になる点は、教育的にどうかというところだったりします。Laravel本体は中でいろいろ工夫してても、そこまで見てないユーザは、スタティックで設計するのはアリアリなんだって思ってしまわないかなーと。
2013-07-24 12:07:08ちなみに、Laravelに関してずらずら、ツイートしているのは、Laravelで検索した時に、別の見方もあることを示すためにやっていることで、特定の意見の反論を目的としていません。 フレームワーク選定中の人の、頭を一方に向いてしまうのを中立へリセットするためです。
2013-07-24 12:10:42