C# MVC 架构,我应该从 MODEL 还是 CONTROLLER 调用存储过程

Posted

技术标签:

【中文标题】C# MVC 架构,我应该从 MODEL 还是 CONTROLLER 调用存储过程【英文标题】:C# MVC architecture, should I call stored procedures from MODEL or CONTROLLER 【发布时间】:2016-12-17 16:47:34 【问题描述】:

我正在学习一些关于模型视图控制器架构的东西,因为我想在我的项目中实现它,所以据我了解它是这样的:

M - 模型,我添加到数据库的连接的项目的一部分(例如 LINQ TO SQL 类或 ADO.NET 实体)

V - 视图,如果我们谈论 c# windows 窗体应用程序,我会保留我的表单的项目的一部分

C - 控制器,项目的一部分,我正在编写从表单中检索和插入数据到数据库的方法,例如:如果我想从数据库中选择所有客户,我接下来会做:

public class CustomerController

   public static List<Customers> GetActiveCustomers()
   
      return DataServices.DB.proc_SelectAllActiveCustomers().ToList();
   

所以在上面的代码中,在我的控制器中,我调用了名为proc_SelectAllActiveCustomers 的存储过程,如果我从我的一些表单中调用它,它将用所有活跃客户填充我的表单。

所以各位,这是正确的吗?或者我应该以某种方式从模型中调用我的存储过程,或者实际上就是这样,因为DataServices.cs 位于模型中并且它用于打开与数据库的连接?

我对此感到困惑..

谁能解释一下这是对还是错?

谢谢各位, 干杯!

【问题讨论】:

model 只是映射表的 POCO,你可以有一个服务层,其中包含调用存储过程的方法,并在控制器中使用服务对象 错字通知:它是架构(不是“架构”,因为你一遍又一遍地拼写它) @marc_s 谢谢你,你太棒了! 【参考方案1】:

控制器是完成所有数据功能和其他逻辑的地方。控制器不应直接连接到数据库,但可以将数据库上下文注入其中。然后它会请求所需的数据实体来填充模型。

模型必须具有功能逻辑。它被认为是哑对象或 DTO(数据传输对象)。根据您使用的技术,它可能包含在传递给视图进行验证和格式化时可以使用的属性。

视图用于显示您传递给它的模型并接收任何需要的输入。视图应该具有有限的逻辑或功能,具体取决于将适当数据放入模型中所需的内容,这些数据可以返回给控制器进行处理。

希望这会有所帮助。告诉我。

【讨论】:

【参考方案2】:

理想情况下,您的模型应该什么都不做。控制器应该将它传递给视图以呈现它,就是这样。如果需要使用存储过程,您可以在控制器中进行。

【讨论】:

所以我的例子好吗?我正在从我的控制器调用存储过程... 是的。理想情况下,您应该使用存储库 (asp.net/mvc/overview/older-versions/…),但对于简单的东西,我也经常跳过它。【参考方案3】:

“Model”负责在“View”和“Controller”之间传输数据 虽然有时它有一些业务逻辑(不好的做法,它必须是一个完全无意识的对象),但它不应该对业务层或数据访问层有任何依赖。

必须从控制器调用获取的数据,并通过调用某种存储库或服务等来调用“控制器”!

附言为了避免服务/存储库的多个实例化,您可以使用“依赖注入”,去吧。

【讨论】:

以上是关于C# MVC 架构,我应该从 MODEL 还是 CONTROLLER 调用存储过程的主要内容,如果未能解决你的问题,请参考以下文章

C# MVC DropDownListFor 字符串列表

MVC架构

asp.net mvc是啥概念

Android应用架构 — 从MVC到MVVM

jQuery MVC 架构

iOS架构:MVC, MVP, MVVM以及VIPER