Этот консультант ASP.NET знает, что он делает? - PullRequest
9 голосов
/ 03 октября 2008

ИТ-отдел нашей дочерней компании попросил консалтинговую компанию написать им приложение 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;
  }

Это, безусловно, сработает и в некоторых ситуациях может быть лучше с точки зрения производительности.

Однако из этих и других вопросов для обсуждения нам просто показалось, что эта команда не была технически сведущей.

Мнения

Ответы [ 22 ]

0 голосов
/ 08 марта 2010

Вместо того, чтобы нанимать Консультанта, вы могли бы так же легко наброситься на человека, который приобрел их услуги. Ни один консультант не идеален, ни менеджер по найму ... но в конце дня реальное направление, в котором вы должны следовать, предельно ясно: вместо того, чтобы пытаться найти ошибку, вы должны тратить энергию на совместную работу по поиску решений. . Независимо от того, насколько квалифицирован кто-то в своих ролях и обязанностях, у него наверняка будут недостатки. Если вы определите, что существует некомпетентность, вы можете перейти к другому ресурсу в будущем, но назначение вины никогда не решало ни одной проблемы в истории.

0 голосов
/ 03 октября 2008

Сохранение в сеансе в асинхронном режиме. Так что это не так, если только эта функция не асинхронная. Но даже в этом случае, поскольку он не вызывает BeginCall и ему есть что вызывать при завершении, следующая строка кода не будет выполняться, пока не завершится строка Session.

Что касается второго утверждения, хотя оно может быть использовано, это не совсем лучшая практика, и у вас есть несколько моментов, на которые следует обратить внимание. Вы сохраняете стоимость создания исключения, но разве вы не хотите знать, что вы пытаетесь разделить на ноль вместо того, чтобы просто пройти мимо него?

Я не думаю, что это серьезное предложение.

...