使用类库和MVC模型

时间:2012-08-15 22:40:36

标签: asp.net-mvc entity-framework

我想知道我制作的解决方案是否可以做得更聪明,我想是的。我的问题是我有一个类库,我保留了所有的方法。然后我得到了我使用模型的MVC。这两个模型是相同的,但我需要转换那些,它的愚蠢。

在我的类库中,我使用Entity Framework,在那里我获得自生成的类。

在我的MVC Model类中,我创建了一个类,所以我可以使用正则表达式。

问题:当我想要发回一个方法时,我经常只想从我的视图中发送我得到的对象。我厌倦了创建一个对象的实例然后这样做:

    [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");
    }

1 个答案:

答案 0 :(得分:1)

这是我在类似问题上发布的内容!希望它能帮助您更好地理解在MVC中对应用程序进行分层,并且您应该将BLL上的方法转换为非静态方法,以便能够有效地测试您的应用程序!

答案:

从高层次来看,当您考虑应用程序架构即数据层,业务逻辑层和表示层时,MVC应该只是您的表示层。我经常看到人们错误地认为在MVC中,模型代表他们的数据层,控制器代表业务逻辑层,视图代表表示层。

您应始终拥有一个单独的业务逻辑层(或服务层),您的MVC控制器可以访问它来执行业务逻辑,还有一个单独的数据访问层(或存储库),只能由您的服务/业务逻辑层访问从数据库中检索数据。

在典型的MVC应用程序中,您可能有多个视图模型表示相同的数据层对象(通常表示数据库表)。例如,您可能有2个视图来表示有关某个人的信息;一个是摘要视图,另一个是详细信息视图。在您的MVC应用程序中,您将拥有2个视图模型,即PersonSummary和PersonDetail,它们都从数据层中的相同Persons表填充,并在控制器调用方法时返回到Controller Action(例如GetPersonSummary()和GetPersonDetails())在PersonService类(业务逻辑层)上。

以这种方式分层应用程序将使它们比将View Models视为数据模型并在Controller操作中编写所有业务逻辑更具可维护性和可测试性。