当社の子会社の IT 部門は、コンサルティング会社に ASP.NET アプリケーションを作成してもらいました。現在、現在のユーザーが誰であるかを混同するという断続的な問題が発生しており、誤って Bob のデータの一部を Joe に表示することが知られています。
コンサルタントはトラブルシューティングのために呼び戻され、私たちは彼らの説明を聞くよう招待されました。2つのことが突き出ました。
最初に、コンサルタント リードが次の疑似コードを提供しました。
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;
}
これは確かに機能し、状況によってはパフォーマンスの観点から改善される可能性があります。
しかし、これらの議論やその他の論点から、このチームは技術に精通していないように思えました。
意見?