我正在编写一些代码,这些代码在其业务和数据层中使用一种模式,这些模式使用事件来表示错误,例如
resource = AllocateLotsOfMemory();
if (SomeCondition())
{
OnOddError(new OddErrorEventArgs(resource.StatusProperty));
resource.FreeLotsOfMemory();
return;
}
这看起来很奇怪,尤其是调用它的代码需要挂钩事件(有四五个不同的事件!)。
开发人员告诉我,这样他们可以在错误处理代码中引用已分配资源的属性,并且该层负责在错误后进行清理。
这有点道理。
替代方案可能类似于
resource = AllocateLotsOfMemory();
if (SomeCondition())
{
BigObject temporary = resource.StatusProperty;
resource.FreeLotsOfMemory();
throw new OddException(temporary);
}
我的问题是:
由于这个“
BigObject
”在异常对象被释放时被释放,我们需要这个模式吗?有没有其他人经历过这种模式?如果有,你发现了什么陷阱?有什么优势?
谢谢!