1

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

在我的类库中,我使用实体框架,在那里我得到了自生成的类。

在我的 MVC 模型类中,我创建了一个类,以便可以使用正则表达式等。

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

    [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 个视图来表示一个人的信息;一个是摘要视图,另一个是详细视图。在您的 MVC 应用程序中,您将拥有 2 个视图模型,即 PersonSummary 和 PersonDetail,它们都是从数据层中的同一个 Persons 表中填充的,并在您的控制器调用方法(例如 GetPersonSummary() 和 GetPersonDetails())时返回到您的控制器操作在 PersonService 类(业务逻辑层)上。

以这种方式对应用程序进行分层将使它们比将视图模型视为数据模型并在控制器操作中编写所有业务逻辑更易于维护和测试。

于 2012-10-16T13:41:21.780 回答