使用多层体系结构时,方法调用的正确顺序是什么?

时间:2012-04-25 13:22:00

标签: asp.net-mvc-3 design-patterns separation-of-concerns

我使用只有1层(MVC)的MVC 3构建了一个简单的调查工具。我现在后悔了。我的所有数据库访问和映射都在控制器和其他一些映射类中处理。

我想切换到使用三层:

演示文稿(MVC)
业务逻辑
数据/持久性(EF)

我正在使用Entity Framework来处理数据库的所有内容。实体框架创建了自己的域类。 MVC使用的模型与EF创建的模型之间的映射应该在哪里?

如果映射在业务层中,是否需要MVC项目中的Models文件夹?

调查问题包括问题本身,行和列。 Theese是我使用的模型:

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; }
    }

theese模型的所有数据都在Controller中检索,基于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时,我应该采取什么路线?

这是我的建议:

- &GT; Controller调用名为

的业务层中的方法
public ShowMatrixViewModel GetQuestion(int QuestionID) {}

- &GT; GetQuestion在数据层中调用以下方法:

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

- &GT;实体框架返回“纯”对象,我想将其映射到我在上面发布的对象 - &GT; GetQuestion调用方法将EF模型映射到我自己的模型
- &GT; Last GetQuestion调用一个映射问题,行和列的方法:

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

这是对的吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

回答问题的第一部分:

“MVC使用的模型与EF创建的模型之间的映射应该在哪里?”

答案是模型MVC使用 由EF创建的模型。 ASP.NET MVC项目中的EF工具是Linq to SQL Classes或ADO.NET Entity Framework Model。您应该在项目的Models文件夹中创建它们,它们提供您的数据/持久性(EF)。