我们子公司的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; }
在某些情况下,从性能角度来看,这肯定会奏效.
然而,从这些和其他讨论点来看,在我们看来,这个团队在技术上并不精通.
意见?
解决方法
我同意这些家伙似乎相当无能.
(BTW,我会检查一下,在“SomeProprietarySessionManagementLookup”中,他们使用的是静态数据,看到这个 – 正如你在几个月前继承的一个项目所描述的行为完全一样,这是一个全面的头痛时刻我们终于看到了…而且希望我们可以和写这个的人面对面…)