2017-05-20 8 views
-1

リモートリソースに依存して結果を返す関数がいくつかあります。 このリモートリソースには、私が変更できない多くのエラーや予期しない応答があります。 以前は関数の結果に依存する一連の関数があります。 各機能のロジックが異なります。例えば従属関数のシーケンスを扱う

:私は何をしたいか

bool remoteFunction(string resource, string parameter = "") 
{ 
// for example request 
//for simplicity this is considered a request, but each function has different logic 
return request.Url("example.com" + resource, parameter); 
} 

var firstResult = remoteFunction("a");     //1st step 
var secondResult = remoteFunction("b", firstResult); //2nd step 
var thirdResult = remoteFunction("c", secondResult); //3rd step 
var fourthResult = remoteFunction("d", thirdResult); //4rth steo 

は次のようになります。それは私たちが望む結果を返すまで

  • は、機能を実行するために再試行してください。 これは、関数の内部または外部で行うことができます。
  • 私は の機能から前の機能に戻ることができるようにして、 フローを続けます。すなわち4番目のステップから2番目のステップにジャンプし、 に続きます。

これを行うには最適なデザインは何ですか?助けのための

おかげで


明確化: をより明確にするために、私は唯一の関数が例外をスローした場合にのみ、バックの順序で行ってみたいです。すなわち、 4rd関数が例外をスローすると、最初に戻り、そこから続行する必要があります。

+1

最高のデザインは決してありません。これまでのアイデアは何ですか? –

+0

各機能を非同期で実行するために必要な操作を実行するには次に、実行する関数を1つ選択できる必要があります。この選択は、コードをスイッチブロックに入れて、各機能が異なる場合に行うことができます。 – jdweng

+0

@jdwengこれらの関数は順番に実行する必要があります。 – circler

答えて

0

順番に実行する必要があるかどうかは不明でした。コードはこちら

  var firstResult; 
      var secondResult; 
      var thirdResult; 
      var fourthResult; 
      int start = 3; 
      for (int i = start; i < 4; i++) 
      { 
       switch (i) 
       { 
        case 0 : 
         firstResult = remoteFunction("a"); 
         break; 
        case 1: 
         secondResult = remoteFunction("b", firstResult); 
         break; 
        case 2: 
         thirdResult = remoteFunction("c", secondResult); 
         break; 
        case 3: 
         fourthResult = remoteFunction("d", thirdResult); 
         break; 
       } 
      } 
+0

これは不完全だと思います。 OPは、各関数はシーケンス内の前の関数の結果に依存していると述べましたが、この答えは質問のその部分に対処していないようです。 –

+0

説明から、渡されたメソッドを繰り返す必要はありません。だから彼は失敗した機能から続行したい。 – jdweng

+0

私のコメントをもう一度読む。問題は、前の関数の** result **を引数として次の関数に渡すことによって関数を順番に呼び出すことです。 –