2016-03-18 7 views
0

どのように悪い静的変数ができるかについて私が読んだことのすべてから、私は静的な肥満になった。 静的変数を1つの大きなプロジェクトに入れるのはとても怖いです。コードを簡単にしても、後悔するかもしれないと思うからです。 静的なものを使用するのは大丈夫なので、決して使用しないようにしています。 私はこのビッグゲームを開発していて、静的entityManagerはとても参考になる、代わりに私がそれを必要とするすべてのクラスにentityManagerインスタンスを渡してしまったが、時にはその一生懸命にそれを渡します。そして、それは私のようなトピックがあることを知っているだけでEntityManager.addEntity(Entity);Im a static fobic

を行うことは簡単だろう「静的使いその大丈夫か?」これを理解しやすい方法で説明するのは容易ではないようです。その大丈夫は、静的変数を使用する際

誰かが、簡単な英語な方法で教えてもらえますか?

英語はそう心の中でそれを保つようにしてください、私の主な言語ではありません。

+4

'entityManager'インスタンスを渡す移動するための方法ですが、あなたはそれが簡単に依存性注入のようなツールを使用して行うことができます。あなたは正しいことをやっている。 –

+0

entitymanagerはスレッドセーフではないので、自分で作成する場合は静的エンティティマネージャを使用しないでください。 Springのようなコンテナは、コンテキスト認識プロキシを持つエンティティマネージャのスレッドセーフティを管理しているので、コンテナ管理環境であれば安全に使用できます。 – Bunti

答えて

2

1)あなたがさまざまなコンポーネントにアクセス可能なシングルトンサービスをしたい場合、それは春のような依存性注入フレームワークを使用することをお勧めします)読み取り専用

2を定数として、最終的なキーワードで静的インスタンスを使用することは全く大丈夫ですDI、CDIやGuiceのは、彼らに

2

staticを管理するString.format()

staticは次のように、定数に最適ですように、ステートレスな、純粋な方法のための素晴らしいです:

public static final double PI = 3.14159; 

staticは、enum(およびこれらのプライベートフィールドにアクセスするために使用されるパブリックメソッド)の値のリストのように、論理的な定義によってのみ論理的な定義が可能なプライベートフィールドに最適です。

通常、はアプリケーション内に1つのEntityManagerしか持っていませんが、複数のエンティティを持つことに間違いはありません。あなたは3、または300万人を持つことができます。厳密にはの1つで、エンティティマネージャではないため、静的であってはなりません。それを渡すことは、それを処理する適切な方法です。

+2

マイナーサイドノート:中断する 'static'メソッドには注意してください単体テスト環境。したがって、「無国籍」であることだけではありません。あなたの単体テストの文脈で呼び出されたときには、 "うまく走っています"。 – GhostCat

1

静的なものを使用する場合は、コードベースに密結合を導入します。その静的なものがプライベートでクラスの内部にある場合、それは問題ではなく、恐れることはありません。しかし、他のすべての場合、代替実装を提供することが不可能になり、今では適切な単体テストを行うことができません。あなたはすべての周りにそのマネージャに合格することがあまりにも多くの仕事を思わ場合

は今、それがはるかに柔軟性をもたらします私を信じて。一方、渡されている管理者が多すぎる場合は、クラスを再考し、小さな部分に分割してください。理想的なケースでは、各クラスは1つの事柄だけに責任を負うべきです。