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 上拥有一个成员级变量来保存它相反。我不确定我能看到这两种方法之间的区别。

为了减少争论,让我问:将类设为静态有什么缺点?我可能不想这样做的原因。

随意批评这种方法;通常我会在 ProcessApprovals 中创建数据集并在调用结束时将其处理掉,但我真的不需要经常刷新数据,如果有的话(我有一个单独的数据集,其中包含更多的临时数据,我将在每个我更新它的时间;SapGs3DataSet 数据真的不会改变)。

另一种方法是使用企业库来缓存数据集,它可以让我设置诸如过期和刷新数据的方法等内容。

我将根据最有力的论据来选择答案,为什么我不应该这样做。如果没有任何强烈的理由不这样做,我会以最好的理由选择答案,说明为什么可以这样做。

蒂亚!
詹姆士

4

2 回答 2

2

我会考虑在对象上使用缓存而不是使其成为静态的。静态类通常更难在测试中测试和使用。即使将数据设为静态也会增加运行自动化测试的难度,因为您需要采取额外的步骤来设置测试数据,添加代码只是为了满足测试需求。使用缓存可以达到相同的效果,并且还允许在需要空间用于其他目的时刷新数据。如果需要,您可以在从缓存中刷新对象时自动重新填充对象,这样您的请求通常不会出现任何性能下降。

于 2010-12-09T19:49:24.043 回答
0

如果您将其设为静态,然后改变主意并想要保持某种状态,那么您就做不到。

于 2010-12-09T19:54:14.117 回答