6

MVCで、ビジネスの例外やエラーを管理するための最良の方法は何ですか?私はいくつかの解決策を見つけましたが、どれを選ぶべきかわかりません。

解決策1

public Person GetPersonById(string id)
{
    MyProject.Model.Person person = null;
    try
    {
        person = _personDataProvider.GetPersonById(id);
    }
    catch 
    { 
        // I use a try / catch to handle the exception and I return a null value
        // I don't like this solution but the idea is to handle excpetion in 
        // business to always return valid object to my MVC.
        person = null; 
    }
    return person;
}

解決策2

public Person GetPersonById(string id)
{
    MyProject.Model.Person person = null;
    person = _personDataProvider.GetPersonById(id);
    // I do nothing. It to my MVC to handle exceptions
    return person;
}

解決策3

public Person GetPersonById(string id, ref MyProject.Technical.Errors errors)
{
    MyProject.Model.Person person = null;
    try
    {
        person = _personDataProvider.GetPersonById(id);
    }
    catch (Exception ex)
    { 
        // I use a try / catch to handle the exception but I return a 
        // collection of errors (or status). this solution allow me to return 
        // several exception in case of form validation.
        person = null; 
        errors.Add(ex); 
    }
    return person;
}

解決策4

// A better idea ?
4

4 に答える 4

1

例外をアプリケーション レベルで処理します。Solution 2を使用することをお勧めします。何らかの例外が発生したときにロジックを変更したい場合は、try..catch ブロックを使用できます。それ以外の場合は、単にアプリケーション インフラストラクチャに任せます。

于 2012-12-03T14:55:24.757 に答える
0

それはあなたの要件に依存します。

  1. プロセスが正常に実行されたかどうかだけを知りたい場合は、プロセス 2 をお勧めします。
  2. エラー ログを書き込む場合は、プロセス 3 が最適です。
  3. 複雑なメソッドは使いたくないが、例外を処理してそのログを書きたい場合は、プロセス 1 をお勧めします。

よろしく、 Pavan.G

于 2012-12-03T10:58:12.063 に答える
0

システム エラーはできるだけ早くキャッ​​チする必要がありますが、クラスを使用するすべてのオブジェクトは、発生する可能性のあるエラーをキャッチするために必要なコードを実装する必要があります。最下位レベルでシステム エラーをキャッチすると、何をするかを決定できます。 - 値を返さない - カスタム エラーをスローする - システム エラーを再スローする

システム エラーとカスタム エラーの間に抽象化レイヤーを挿入すると、別の注意が必要な新しいエラーを導入できます。IE: エラーが FileNotFoundException の場合、通常のエラー (つまり、ファイルは日次レポートですが、ファイル asket は将来のレポートを表す) かそうでないか (ファイルが存在する必要があります) を区別したい場合があります。

最初のフェーズで、必要に応じて通常の例外を単に再スローする場合でも、ソリューション 3 をお勧めします。

サージ

于 2012-12-03T10:44:37.080 に答える