我正在学习一些关于模型视图控制器架构的东西,因为我想在我的项目中实现它,所以我理解它是这样的:
M - 模型,我添加数据库连接的项目的一部分(例如LINQ TO SQL Classes或ADO.NET Entity)
V - 查看,如果我们谈论c#windows form application,我会保留表单的项目的一部分
C - 控制器,项目的一部分,我正在编写从表单中检索数据并将数据插入数据库的方法,例如:如果我想从数据库中选择所有客户,我会做下一步:
public class CustomerController
{
public static List<Customers> GetActiveCustomers()
{
return DataServices.DB.proc_SelectAllActiveCustomers().ToList();
}
}
所以在上面的代码中,在我的控制器中,我正在调用名为proc_SelectAllActiveCustomers
的存储过程,如果我从我的某些表单中调用它,它将填充我的表单给所有活跃的客户。
那么伙计们这是对的吗?或者我应该以某种方式从Model中调用我的存储过程,或者实际上是因为DataServices.cs
位于Model中并且它用于打开与数据库的连接?
我对此感到困惑。
有人能解释我这是对吗?
谢谢你们, 干杯!
答案 0 :(得分:1)
理想情况下,您的模型绝对不会做任何事情。控制器应该将它传递给视图以呈现它和它。如果需要使用存储过程,则可以在控制器中执行。
答案 1 :(得分:1)
Controller是完成所有数据功能和其他逻辑的地方。 Controller不应直接连接到数据库,但可以将数据库上下文注入其中。然后它会请求所需的数据实体填充模型。
模型具有功能逻辑。它被认为是哑对象或DTO(数据传输对象)。根据您使用的技术,它可能包含在传递给View进行验证和格式化时可以使用的属性属性。
视图用于显示传递给它的模型并接收任何所需的输入。视图应具有有限的逻辑或功能,这取决于将正确数据放入模型中所需的内容,该模型可以返回到Controller进行处理。
希望这会有所帮助。让我知道。
答案 2 :(得分:-1)
“模型”负责在“查看”和“控制器”之间传输数据 虽然有时它有一些业务逻辑(不好的做法,它必须是一个完全没有头脑的对象),但它不应该对业务层或数据访问层有任何依赖。
必须从控制器调用获取的数据,并调用某种存储库或服务等等“控制器”!
P.S。为了避免服务/存储库的多个实例化,你可以使用“依赖注入”,去寻找它。