1

コントローラー - サービス - リポジトリ レイヤー パターンを使用しています。私はアプリケーションです。リポジトリは基本的な CRUD 操作を保持し、サービス レイヤーはすべてのビジネス ロジックを保持しますが、コントローラーは非常に無駄のない状態に保たれます (それらはサービス レイヤー関数のみを呼び出します)。

メッセージ (成功、警告など) をユーザーに送信したいのですが、サービス レイヤーレベルから送信する方法がわかりません。TempData と基本クラスを使用していくつかのソリューションを調べましたが、それらはコントローラー レベルでしか機能しないようです。

ユーザー通知をサービス層からビューにプッシュする良い解決策はありますか?

4

3 に答える 3

2

アプリのアーキテクチャでは、関心が適切に分離されているようです。この方法を維持することは非常に賢明です。サービス層に UI について何も認識させないでください。

私がすることは、サービス層が実行結果として返すクラスを作成することです。

public class ExecutionResult<T>
{
    public T Result { get; set; }
    public string Message { get; set; }
}

このようにして、ビューに渡して表示できますMessageViewBag.UserNotification

編集:使用例:

public class Math
{
    public ExecutionResult<double> Divide(double number, double divideBy)
    {
        if (divideBy == 0)
        {
            return new ExecutionResult<double>
                {
                    Result = double.NaN,
                    Message = "Division by zero is not possible"
                };
        }

        return new ExecutionResult<double>
            {
                Result = number/divideBy
            };
    }
}

これは単なるサンプルです。現実の世界では、タイプの値を比較する際に異なるアプローチを取るでしょうdouble

于 2013-05-10T05:56:13.523 に答える
0

この種のパターンでは、サービス レイヤーからビューを直接操作したくないため、メソッド呼び出しごとにカスタム データ転送オブジェクトをコントローラーに返すことを検討してください。これらの DTO には、エラー メッセージや通知が含まれている可能性があります。次に、コントローラーはこのデータをビューに渡すことができます。

于 2013-05-10T05:54:11.493 に答える
0

1 つの方法は、サービス メソッドがブール値を返して成功または失敗を示すことです。コントローラーはこれを認識し、それに応じて行動できます。

別の方法として、メソッドがサービスで発生したことに関する情報を含むカスタムの「エラー」オブジェクトを返すこともできます。

于 2013-05-10T05:55:34.957 に答える