我现在必须对模特做出决定。
我知道模型是你用来做所有数据库操作的。
但模型是否仅限于此?
我的意思是。
它们仅用于数据库交互, 或者它们是否适用于所有外部数据操作(例如来自外部API的数据等)?
答案 0 :(得分:17)
MVC范例是一种设计模式,您可以使用以下结构组织应用程序。
模型:这是您应该保留数据模型的算法。例如,如果您编写电子表格应用程序,则会保留电子表格的数据结构。您可以在模型中使用计算引擎,您可以使用代码在模型中保存和加载电子表格。这些模型类可能会在其他应用程序中重用,例如,如果您有代码来执行数据压缩。
视图或视图:这些是用于可视化数据(UI)的代码的一部分,对于电子表格,您有一个带有单元格A1到Z100等的典型电子表格视图。您还可以使用图表视图显示数据。等等。 视图也可以在其他应用程序中重用,例如,您可以重用您的花式图表视图。
控制器将视图连接到模型。这可能是最不可重复使用的部分,控制器了解模型,知道要显示哪些视图。通常,控制器将设置当用户与应用程序交互时视图将调用的回调。然后,控制器将从模型中获取信息并更新视图。
如果您遵循这些指导原则,您可以更改模型,例如从保存文件的模型更改为磁盘模式,以便在不更改UI的情况下将文件保存到云中......理论上。您还可以在不更改模型的情况下添加新视图。您还可以为模型编写单元测试或回归测试。
没有严格的规则,最好是运用常识和自己的判断。
答案 1 :(得分:9)
例如,在Django中,model是一个映射到数据关系(表)并可能桥接表的类(例如,用于多对多关系)。
同一个类可以有对相应数据进行操作的方法,可能有其他类本身没有定义模型,但访问和过滤数据的方法。
但MVC中的术语模型确实适用于描述数据结构和一般访问它们的方法。
框架可能在某种程度上弯曲了抽象术语。例如,Django调用视图实际上是控制器函数,定义表示的实体称为模板,而不是视图。
答案 2 :(得分:7)
更新/重写
不,它们不仅限于数据库访问。
在MVC应用程序中,M通常是您域的模型。这意味着它可以封装业务逻辑和数据。我建议你避免使用anaemic domain model。您甚至可以将模型设置为持久性无知。要了解我的意思,请在Crafting Wicked Domain Models上查看此演讲。
在视图和控制器方面,我建议始终使用所谓的视图模型,即使它感觉像是1对1映射。迟早你会发现模型实际上是不同的,你不想让View更负责任,然后将简单的View Model直接翻译成HTML或其他渲染格式。
然后,控制器作业只需在模型上执行行为并为视图创建视图模型。
答案 3 :(得分:2)
不要将模型与数据库联系起来。将其视为当前使用数据的内存中表示(对于当前未使用的数据,可能在数据库中,当您访问该数据时,首先它将进入模型,然后传播到应用程序的其他部分) )。完成数据操作后(在Model中执行),您可以将其保存到Database以供以后使用。此外,Model是从DB中检索数据时从DB获取数据的第一个类。
答案 4 :(得分:0)
对我来说,简单的解释是:
查看:这是一个创建请求并接收响应并可视化界面的实体
模型:这是一个实体,它接收View的请求并返回响应。
控制器:这是位于视图和模型之间并对其进行协调的实体。
因此,如果从系统中删除控制器并查看剩下的是 Model 。
因此,模型不仅仅是数据模型或业务逻辑模型。它也可能包含其他部分,例如安全性,验证,处理,过滤等。