2013-02-26 3 views
10

私はかなり混乱しています。Laravelの多くの静的メソッドが悪い習慣とはみなされない理由を理解しようとしている

Redditのいくつかの開発者に自分のコードを確認するよう依頼しました。それはこのように見えます。

Template::load('register', array('error_message' => Language::translate('username_in_use')); 

したがって、{error_message}は、register.phpを読み込み、変換します。 (申し訳ありませんが、このユーザー名は使用中です。別の番号を選択してください)

あまりにも多くの静的呼び出しを使用するのは悪い習慣です。しかし、彼らはLaravelフレームワークを提案しています。これは$ thisを完全に取り除き、静的呼び出しを使用します。

これは悪い習慣である場合、どのように私は説明することができますか、ララベルは高級なフレームワークですか?

+2

練習が悪くても良いこともありません。すべての時間と場所があります。 –

+1

これは正しい単位のテストです。それがここで悪いと考えられる理由の1つです。しかし、それはまた可読で簡潔です。 –

答えて

28

静的状態は遍在しており、状態をリセットするだけでは不十分であるため、テスト容易性が完全に破壊されます。さらに、コードの他の要素が予測できないような状態に影響を与えるものがあれば、予測できない動作につながる可能性があります。

Laravel 4は静的な「ファサード」を使用することでこれを防ぎます。これらのファサードは「IoC解決のための統語論的な短手」である。構文上の砂糖と密接に結合したコードの両方を提供します。

ファサードによって解決されるクラスを変更して、モックシステムなどを注入することができます。

もちろん、これは静的アクセスの他の面を本当に解決するものではありません。異なる機能を注入するだけでは問題ありません。しかし、Laravelアプリケーションでは、通常、ドメイン内でファサードを使用することはありません。 Webトランスポートレイヤーは、Webトランスポートレイヤーが既にあなたのフレームワークと緊密に結合されているので非常に役立ちます。アプリケーションのそのレイヤーのDSLに似たものを作成するだけで、その事実をうまく利用できます。

繰り返しますが、あなたのドメイン層でファサードを深く使わないでください。

関連する問題