1

私が作った解決策をもっと賢くできるかどうか疑問に思っていましたが、そうだと思います。私の問題は、すべてのメソッドを保持するクラスライブラリを取得したことです。次に、モデルを使用するMVCを取得しました。これらの2つのモデルは同じですが、私はそれらを変換する必要があり、その愚かです。

私のクラスライブラリでは、自己生成クラスを取得するEntityFrameworkを使用しています。

私のMVCModelクラスでは、正規表現などを使用できるようにクラスを作成します。

問題:メソッドを送り返したいときは、ビューから返されるオブジェクトを送りたいだけです。オブジェクトのインスタンスを作成するのにうんざりしていて、これを実行します。

    [HttpPost]
    public ActionResult CreateUser(UserModel user)
    {
        //my class libary / entity framework class for a user
        User efUser = new User();
        efUser.Email = user.Email;
        efUser.Username = user.Username;
        efUser.Password = user.Password;

        UserBLL userBLL = new UserBLL();

        //send the method to classlibary / logic layer
        userBLL.CreateUser(efUser);

        return RedirectToAction("Index");
    }
4

1 に答える 1

1

これが私が同様の質問に投稿したものです!MVCでのアプリの階層化をよりよく理解するのに役立つことを願っています。また、アプリケーションを効果的にテストできるようにするには、BLLのメソッドを非静的に変更する必要があります。

答え:

高レベルの観点から、アプリケーションアーキテクチャ、つまりデータレイヤー、ビジネスロジックレイヤー、プレゼンテーションレイヤーについて考える場合、MVCはプレゼンテーションレイヤーのみである必要があります。MVCでは、モデルはデータレイヤーを表し、コントローラーはビジネスロジックレイヤーを表し、ビューはプレゼンテーションレイヤーを表すと誤解されることがよくあります。

MVCコントローラーがビジネスロジックを実行するためにアクセスする個別のビジネスロジックレイヤー(またはサービスレイヤー)と、データを取得するためにサービス/ビジネスロジックレイヤーによってのみアクセスされる個別のデータアクセスレイヤー(またはリポジトリ)が常に必要です。データベースから。

通常のMVCアプリケーションでは、同じデータ層オブジェクト(通常はデータベーステーブルを表す)を表す複数のビューモデルがある場合があります。たとえば、人に関する情報を表すために2つのビューがあるとします。1つは概要ビューで、もう1つは詳細ビューです。MVCアプリケーションには、2つのビューモデル、つまりPersonSummaryとPersonDetailがあり、どちらもデータレイヤーの同じPersonsテーブルから入力され、コントローラーがメソッド(GetPersonSummary()やGetPersonDetails()など)を呼び出すとコントローラーアクションに返されます。 PersonServiceクラス(ビジネスロジック層)。

このようにアプリケーションを階層化すると、ビューモデルをデータモデルとして扱い、すべてのビジネスロジックをコントローラーアクションに書き込むよりも、はるかに保守性とテスト性が向上します。

于 2012-10-16T13:41:21.780 に答える