もともと静的であることを意図していなかったクラスを持っています...
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 を使用してデータセットをキャッシュすることです。これにより、有効期限やデータの更新方法などを設定できます。
なぜこれをすべきでないのか、最も強い議論に基づいて答えを選びます。やらないことについての強い議論がない場合は、なぜそれが大丈夫なのかについて、最も合理的な理由で答えを選びます。
ティア!
ジェームズ