ИТ-отдел нашей дочерней компании попросил консалтинговую компанию написать им приложение ASP.NET. Теперь у него периодически возникают проблемы со смешиванием того, кто является текущим пользователем, и, как известно, ошибочно показывает Джо некоторые данные Боба.
Консультанты были возвращены для устранения неполадок, и нас пригласили выслушать их объяснения. Выделены две вещи.
Сначала руководитель консультанта предоставил этот псевдокод:
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;
}
Это, безусловно, сработает и в некоторых ситуациях может быть лучше с точки зрения производительности.
Однако из этих и других вопросов для обсуждения нам просто показалось, что эта команда не была технически сведущей.
Мнения