0

もともと静的であることを意図していなかったクラスを持っています...

public class SapApprovalHandler {

    private static SapGs3DataSet sapGs3DataSet;

    static SapApprovalHandler() {
        try {
            // Actually fills the dataset
            sapGs3DataSet = new SapGs3DataSet("SAP");
        }
        catch {
            throw new ApplicationException("Unable to create the SAP-GS3 DataSet");
        }
    }

    public static XElement ProcessApprovals(XElement SapData) {
        // Basically updates the dataset
    }

}

クラスを構築する際に、(1) データセットを明示的に更新しない限り、データセットを再入力したくない、(2) これらのデータのゲートキーパーは私である、と判断しました。他の誰もそれらを更新してはいけません。このクラスは、WCF サービス内から呼び出されます。

再利用したいデータセット以外に状態はありません。このクラスのすべての関数を静的にすることができます。しかし、クラスを静的にすることは受け入れられますか? それをインスタンス化し、それを保持するために WCF にメンバーレベルの変数を持つのとは対照的です。2つのアプローチの違いを確認できるかどうかはわかりません。

これをあまり議論の余地のないものにするために、私に質問させてください: クラスを静的にすることの欠点は何ですか? これをやりたくない理由。

一般的なアプローチを自由に批判してください。通常、ProcessApprovals 内でデータセットを作成し、呼び出しの最後に破棄しますが、実際にはデータを頻繁に更新する必要はありません。更新するとき; SapGs3DataSet データは実際には変更されません)。

もう 1 つの方法は、たとえば Enterprise Library を使用してデータセットをキャッシュすることです。これにより、有効期限やデータの更新方法などを設定できます。

なぜこれをすべきでないのか、最も強い議論に基づいて答えを選びます。やらないことについての強い議論がない場合は、なぜそれが大丈夫なのかについて、最も合理的な理由で答えを選びます。

ティア!
ジェームズ

4

2 に答える 2

2

オブジェクトを静的にするのではなく、キャッシュを使用することを検討します。通常、静的クラスはテストやテストでの使用が困難です。データを静的にしても、自動テストの実行が難しくなります。テストのニーズに対応するためだけにコードを追加して、テスト用のデータをセットアップするための追加の手順が必要になるからです。キャッシュを使用すると同じ効果が得られ、他の目的でスペースが必要な場合にデータをフラッシュすることもできます。必要に応じて、キャッシュからフラッシュされたときにオブジェクトの再入力を自動化して、通常、リクエストのパフォーマンスが低下しないようにすることができます。

于 2010-12-09T19:49:24.043 に答える
0

あなたがそれを静的にして、それからあなたの考えを変えて、そしてある状態を保ちたいならば、あなたはそうすることができません。

于 2010-12-09T19:54:14.117 に答える