2016-08-30 4 views
0

シングルトンパターンを使用するのは、通常コードの匂いです。シングルトンパターンはフレームワークコンテキストで話すときにはまだ悪いですか?

しかし、Laravelなどのフレームワークで「シングルトン」を使用することは、多くの問題に対する一般的な解決策であるようです。

それはLaravelでシングルトンは、次の意味で本当にシングルトンクラスと同じものではないことも注目に値します:

  • シングルトンとして使用されているクラスは、こののに気付かない、何 がありませんそこには静的メソッドがありません。また、 がそのクラスの新しいインスタンスを手動で作成できないようなものはありません。
  • Laravelシングルトンを使用している場合、コンテナはシングルトンとして使用する オブジェクトを追跡し、 要求時にこれらを手渡します。

Laravelではシングルトンと呼ばれるものが実際にシングルトンではなく、シングルトンパターンからインスピレーションを受けた実装であるため、実際のシングルトンは、いくつかの短所(テストするのが難しい、グローバルな状態...)を取り除くためです。

この質問は緩やかにthis question about design patterns in PHPに関連していますが、別の質問を作成するのが適切であるようです。

答えて

0

はい、それでも悪いです。それはまだ反パターンです。

実際には、多くの人がこれに頼っているのを見ると、特定のシステムの欠陥を示すだけです。これは、アプリケーション、フレームワーク、およびライブラリに適用されます。

「私たちのシングルトンは異なる」は間違っています。また、適切な単体テストを書く場合は、フレームワークのさまざまな部分を初期化せずに、アイソレーションでコードをテストすることになります。

P.S.
"コードの匂い"が間違っているようです。コードの臭いは、$a1$bzzzzという名前の変数があり、コードの臭いが関数に8つのパラメータがあるときです。 Anit-patternはコードの匂いではありません。それは建築の間違いです。

+0

DIコンテナでシングルトンとして分離されているクラスをテストする際に問題はありません。あなたの実装は、彼らが受け取っているインスタンスを気にするべきではありません。 – Vercoutere

関連する問題