我们子公司的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”中,他们使用的是静态数据,看到这个 – 正如你在几个月前继承的一个项目所描述的行为完全一样,这是一个全面的头痛时刻我们终于看到了…而且希望我们可以和写这个的人面对面…)