0

我读过我的模型应该只是数据的愚蠢容器,这对我很有吸引力。如果是这种情况,那么我的理解是控制器会调用存储库,它只会填充模型并将它们像这样传回。

        using (var userRepo = new UserRepository())
        {
            var users = userRepo.GetAll();
            return View(users);
        }

如果我想添加一个像 AlertUserOrderHasBeenRecd() 这样的方法,我应该把它放在哪里?

如果我将它放入存储库,那么存储库所做的不仅仅是数据持久性。

如果我把它放到模型中,那么模型就不再是一个愚蠢的数据容器。

我还可以添加一个在订单模型和用户模型中传递的附加类,并在不了解 EF 的情况下执行操作。

或者是其他东西。

是否有普遍接受的最佳处理方式?

4

2 回答 2

2

该方法可以在服务层中定义。服务层依赖于存储库,因为它包含可能由来自存储库的多个 CRUD 操作组成的业务操作。然后,您的控制器将采用服务层而不是存储库并在其上调用业务方法。

作为向您的应用程序引入另一个抽象层的替代方法,您可以使用favor query objects over repositories.

于 2012-10-15T15:51:11.787 回答
0

分离模型和视图模型的结果非常好。ViewModel 只是数据的哑容器(DTO)。模型是业务层(UI 的业务)。所以,结果是:

  • 控制器:处理通过站点的导航。
  • Models:填充和处理Controller请求的ViewModel。
  • ViewModel:带有将被表示的数据的 DTO。
  • 视图:ViewModel 中数据的可视化表示。

在此架构中,您的方法将位于模型中。

于 2012-10-15T15:57:46.190 回答