rea*_*der 7 .net error-handling design-patterns exception-handling alerts
假设您有一个.NET系统,当出现错误时需要向系统管理员发送电子邮件通知.例:
try
{
//do something mission critical
}
catch(Exception ex)
{
//send ex to the system administrator
//give the customer a user-friendly explanation
}
Run Code Online (Sandbox Code Playgroud)
这段代码被不同的用户每秒调用数百次.
现在让我们假设底层的API /服务/数据库出现问题.这段代码很多次都会失败.糟糕的管理员将在收件箱中唤醒几百万封电子邮件,而开发商将会接到一个粗鲁的电话,而不是今天早上必然会发生这样的事件(咳嗽).
很明显,这不是一个可以很好地扩展的设计.
想到的前几个解决方案在某些方面都存在缺陷:
这似乎是一个必须解决的问题,而且我们正以愚蠢的方式解决这个问题.建议表示赞赏,即使它们涉及完全不同的异常管理策略!
我想到的最简单的解决方案是为此例外块分配一个ID号(如1),并将最后一次通知的时间记录给管理员.如果通知之间的经过时间不够大(例如,一小时),请不要再次通知管理员
如果这段代码通常会生成多种异常,您可能还想记录异常的类; 如果同一异常的通知之间的经过时间不够大,请不要再次通知管理员