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 调用存储过程的主要内容,如果未能解决你的问题,请参考以下文章