あなたがここで何を求めているのかは分かりません。あなたの疑似コードは、あなたのクラスのコンストラクタで呼び出されているLogin()メソッドを示しています。これが本当にあなたのコードがどのように動作しているのであれば、再びLoginを呼び出すのを防ぐために、このクラスの新しいインスタンスの作成を避ける必要があります。
しかし、私はあなたが本当に矢のアンチパターンについて尋ねていると思います:
http://codinghorror.com/blog/2006/01/flattening-arrow -code.html
EDIT
I was trying to avoid copy & paste, but since the original post seems not to have been clear enough, here's a selection from Coding Horror as linked above:
Where appropriate, I flatten that arrow code by doing the following:
Replace conditions with guard clauses. This code..
if (SomeNecessaryCondition) {
//function body code
}
.. works better as a guard clause:
if (!SomeNecessaryCondition)
{
throw new RequiredConditionMissingException;
}
//function body code
(他のテクニックも掲載されていることに注意してください。しかし、私はこの最初のもので十分でしょう)
このようにして、チェックが失敗すると、メソッド呼び出しが失敗した場合、それぞれの追加チェックで別のネストされたチェックが行われることはありません。これは、button1_Clickがbool(成功の場合はtrue、失敗の場合はfalse)を返す関数を呼び出し、失敗した場合はfalseを返すことによって例外をスローすることなく行うこともできます。
private void button1_Click(object sender, RoutedEventArgs e)
{
if (AllSystemsGo())
{
DoOpenDashboard();
}
}
private bool AllSystemsGo()
{
if (!Login("johndoe","password"))
return false;
if (checkForSomethingEvil("johndoe"))
return false;
if (!checkForSomethingImportant())
return false;
return true;
}