我们一家子公司的 IT 部门让一家咨询公司为他们编写了一个 ASP.NET 应用程序。现在它在混淆当前用户是谁并且已知错误地向 Joe 显示 Bob 的一些数据时遇到了间歇性问题。
顾问被带回来进行故障排除,我们被邀请听取他们的解释。有两件事突出。
首先,顾问领导提供了这个伪代码:
void MyFunction()
{
Session["UserID"] = SomeProprietarySessionManagementLookup();
Response.Redirect("SomeOtherPage.aspx");
}
他接着说会话变量的赋值是异步的,这似乎不正确。授予对查找函数的调用可以异步执行某些操作,但这似乎不明智。
鉴于所谓的异步性,他的理论是在引发重定向不可避免的 ThreadAbort 异常之前没有分配会话变量。然后,此故障阻止 SomeOtherPage 显示正确的用户数据。
其次,他举了一个他推荐的编码最佳实践的例子。而不是写:
int MyFunction(int x, int x)
{
try
{
return x / y;
}
catch(Exception ex)
{
// log it
throw;
}
}
他推荐的技术是:
int MyFunction(int x, int y, out bool isSuccessful)
{
isSuccessful = false;
if (y == 0)
return 0;
isSuccessful = true;
return x / y;
}
这肯定会奏效,并且在某些情况下从性能的角度来看可能会更好。
然而,从这些和其他讨论点来看,在我们看来,这个团队在技术上并不精通。
意见?