1

1層(MVC)のみのMVC3を使用して簡単な調査ツールを作成しました。私は今これを後悔しています。私のすべてのデータベースアクセスとマッピングは、コントローラーと他のいくつかのマッピングクラスで処理されます。

3つのレイヤーの使用に切り替えたいと思います。

プレゼンテーション(MVC)
ビジネスロジック
データ/永続性(EF)

私はEntityFrameworkを使用して、データベースですべてを処理しています。エンティティフレームワークは、独自のドメインクラスを作成します。MVCが使用するモデルとEFが作成するモデルの間のマッピングはどこに行くべきですか?

マッピングがビジネスレイヤーにある場合、MVCプロジェクトにModelsフォルダーが必要ですか?

調査質問は、質問自体、行と列で構成されます。これらは私が使用するモデルです:

public class Question {

        public int Question_ID { get; set; }

        public Boolean Condition_Fullfilled;

        [Required(ErrorMessage = "Dette felt er påkrævet")]
        public String Question_Wording { get; set; }

        public String Question_Type { get; set; }

        [Required(ErrorMessage = "Dette felt er påkrævet")]
        public String Question_Order { get; set; }

        public String Left_scale { get; set; }
        public String Right_scale { get; set; }
        public int Scale_Length { get; set; }
        public String Left_Scale_HelpText { get; set; }
        public String Right_Scale_HelpText { get; set; }

        public Boolean Visible { get; set; }
        public Boolean IsAnswered { get; set; }
        public String Question_HelpText { get; set; }
        public int Category_ID { get; set; }

}
public class MatrixColumns
    {
        public int Column_ID { get; set; }
        public int Column_Number { get; set; }
        public String Column_Description { get; set; }
        public Boolean IsAnswer { get; set; }
        public int? Procent { get; set; }
        public bool Delete { get; set; }
        public bool Visible { get; set; }
        public int? Numbers { get; set; }
        public String Help_Text { get; set; }

    }

    public class MatrixRows
    {
        public bool Delete { get; set; }
        public bool Visible { get; set; }
        public int Row_Id { get; set; }
        public String Row_Number { get; set; }
        public String Row_Description { get; set; }
        public String Special_Row_CSS { get; set; }
        public String Help_Text { get; set; }
        // Dette er summen af procenterne af alle kolonner i rækken
        public int RowSum { get; set; }
    }

これらのモデルのすべてのデータは、QuestionIDに基づいてコントローラーで取得され、次のようなViewModelにマップされます。

 public class ShowMatrixQuestionViewModel : Question
    {
        public Dictionary<MatrixRows, List<MatrixColumns>> columnrow { get; set; }
        public List<MatrixColumns> columns { get; set; }
        public List<MatrixRows> rows { get; set; }

        public ShowMatrixQuestionViewModel()
        {
            columns = new List<MatrixColumns>();
            rows = new List<MatrixRows>();
            columnrow = new Dictionary<MatrixRows, List<MatrixColumns>>();
        }
    }

それでShowMatrixQuestionViewModel、コントローラーからビューにを送信したい場合、どのルートを取る必要がありますか?

これは私の提案です:

->コントローラーはビジネスレイヤーのメソッドを呼び出します

public ShowMatrixViewModel GetQuestion(int QuestionID) {}

-> GetQuestionは、データレイヤーで次のメソッドを呼び出します。

public Question GetQuestion(int QuestionId) {}
public MatrixRows GetRows(int QuestionId) {}
public MatrixColumns GetColumns(int id) {}

-> Entity Frameworkは、上記で投稿したオブジェクトにマップしたい「純粋な」オブジェクトを返します
-> GetQuestionは、EFモデルを自分のモデルにマップするメソッドを
呼び出します->最後のGetQuestionは、Questions、Rows、および列:

    ShowMatrixQuestionViewModel model = MapShowMatrixQuestionViewModel(Question, MatrixRows, MatrixColumns)
return model;

これは正しいです?

前もって感謝します

4

1 に答える 1

0

あなたの質問の最初の部分に答えるには:

「MVCが使用するモデルとEFが作成するモデルの間のマッピングはどこに行くべきですか?」

答えは、MVCが使用するモデルはEFによって作成されたモデルであるということです。ASP.NET MVCプロジェクトのEFツールは、LinqtoSQLクラスまたはADO.NETEntityFrameworkModelのいずれかです。これらはプロジェクトのModelsフォルダー内に作成する必要があり、データ/永続性(EF)を提供します。

于 2012-04-25T16:00:56.293 に答える