2017-03-11 5 views
1

例えば:静的メソッドを持つクラスを持っていますか?そのすべてが同じプロパティを持ち、悪いとみなされますか?

class A 
    { 
    ... 
    //class variables and methods 

    public static A GetAWithKey (DatabaseConnection conn, string key) {...} 
    public static A[] GetSomeAWithKeys (DatabaseConnection conn, string keys[]) {...} 
    public static bool IsAWithThisPropertyExists (DatabaseConnection conn, string thisProperty) {...} 
    } 

問題である - それらの全ては、私は、コード内のすべてのメソッド呼び出しに渡すDatabaseConnectionの同じインスタンスを動作します。

DatabaseConnectionをクラスAの静的変数にするのは賢明ですが、正しく初期化するにはどうすればいいですか?それとも別の良い解決策がありますか?

+1

「シングルトンパターン」を使用 – Xaqron

+0

@Xaqronどのように理解できないのですか、コード例で明確にすることはできますか? –

+1

このリンクをチェック:http://csharpindepth.com/Articles/General/Singleton.aspx – Xaqron

答えて

0

[OK]をいくつか考えた後、私は最高のソリューションは@ Xaqronのような外部のソースから同じ価値を得ることになると決めた - シングルトンインスタンス。それはスコープにシングルトンを持つ新しい参照を与える必要がありますが、それはまだ最高のものです。 静的を使用した例

class A 
{ 
... 
//class variables and methods 

public static A GetAWithKey (string key) 
{ 
    DatabaseConnection conn = DataBase.GetConnection(); 
    ... 
} 
} 
+0

私は同意しない。 Ghostcatの答えはコードの柔軟性を高めます。たとえば、別のデータベースに接続したいと思ったらどうしますか?ユニットテストはどうですか? –

+0

@BrianMcCutchon彼の答えに私のコメントに関係してください、それは私が達成しようとしていることがより明確になります。 –

1

はとにかく良いOOで異常です。だから、「静的を使って単独で」は、(あなたが本当に何を/なぜ使っているのかを本当に理解していない限り)しばしば悪いです。

し、すべてのメソッドがDBConnection connパラメータは、あなたの代わりにあなたがそれを保証するために、依存性注入を使用し、そのクラスの普通フィールドconnパラメータことを変更することを、かなり明確に示すことを取るという事実すべてのメソッドを合理的にユニットテストすることができます)。

+0

[この質問に関するコメント](http://stackoverflow.com/questions/42747978/error-in-java-how-to-remove-it) - スクリーンショットのブラウザでURLをチェックしてください。それはそこに行ったものと同じくらい多くの "思考"です); –

+0

たぶん、そうではないかもしれません。 – GhostCat

+0

@GhostCat私も静的な使用は悪いと考えていますが、 'Find() 'のような操作をどのように実装するかは分かりませんが、私はあなたの評価が10 downvotesを引き起こし、 'または' Exists() 'を使用してください。 'User userToDelete = User.FindByKey(key);'を呼び出すのは当然のようです。私が持っている解決策は、DTOオブジェクトで動作する別のオブジェクトを作ることです。 _BUT_、各DTOオブジェクトでこのようなオブジェクトを作成すると、オブジェクトの単純な動物園ができます。 FindById()のようなインタフェースで同様のメソッドでそれらを結合することもできましたが、すべてのDTOオブジェクトが多くの異なるプロパティを持っているので、どうすればいいでしょうか? –

関連する問題