有一个本来不是静态的课程......
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数据确实不会改变。)
另一种方法是使用企业库来缓存数据集,这样我就可以设置过期和方法来刷新数据。
我会根据最强烈的争论选择答案,为什么我不应该这样做。如果没有任何强有力的论据可以不做,我会用最好的理由选择答案,为什么它没问题。
TIA!
詹姆斯
答案 0 :(得分:2)
我会考虑在对象上使用缓存而不是将其设置为静态。静态类通常难以在测试中测试和使用。即使使数据静态也会增加运行自动化测试的难度,因为您需要采取额外步骤来设置测试数据,添加代码以满足测试需求。使用缓存可以实现相同的效果,并且如果需要空间用于其他目的,还允许刷新数据。如果需要,您可以在从缓存刷新时自动重新填充对象,以便您的请求通常不会出现任何性能下降。
答案 1 :(得分:0)
如果你让它变得静止,然后改变主意并希望保持某种状态,那么你就不能。