MVC ::什么是模型?

Hai*_*ood 21 model-view-controller model

我正处于必须对模型做出决定的地步.

我知道模型是你用来做所有数据库操作的.

但模型是否仅限于此?

我的意思是这个.

它们仅用于数据库交互,还是用于所有外部数据操作(例如来自外部API的数据等)?

小智 19

MVC范例是一种设计模式,您可以使用以下结构组织应用程序.

模型:这是您应该保留数据模型的算法.例如,如果您编写电子表格应用程序,则会保留电子表格的数据结构.您可以在模型中使用计算引擎,您可以使用代码在模型中保存和加载电子表格.这些模型类可能会在其他应用程序中重用,例如,如果您有代码来执行数据压缩.

视图或视图:这些是用于可视化数据(UI)的代码的一部分,对于电子表格,您具有带有单元格A1到Z100等的典型电子表格视图.您还可以使用图表视图显示数据.等等.视图也可以在其他应用程序中重用,例如,您可以重用您的花式图表视图.

控制器将视图连接到模型.这可能是最不可重复使用的部分,控制器了解模型,知道要显示哪些视图.通常,控制器将设置当用户与应用程序交互时视图将调用的回调.然后,控制器将从模型中获取信息并更新视图.

如果您遵循这些指导原则,您可以更改模型,例如从保存文件的模型更改为磁盘模式,在不改变UI的情况下将文件保存在云中......理论上.您还可以在不更改模型的情况下添加新视图.您还可以为模型编写单元测试或回归测试.

没有严格的规则,最好是运用常识和自己的判断.


Evg*_*eny 10

例如,在Django中,model是一个映射到数据关系(表)和可能桥接表(例如,用于多对多关系)的类.

同一个类可以有对相应数据进行操作的方法,可能有其他类本身没有定义模型,但是访问和过滤数据的方法.

但MVC中的术语模型确实适用于描述数据结构和一般访问它们的方法.

框架可能在某种程度上弯曲了抽象术语.例如,Django调用视图实际上是控制器函数,定义表示的实体称为模板,而不是视图.


Dan*_*tle 7

更新/重写

不,它们不仅限于数据库访问.

在MVC应用程序中,M通常是您域的模型.这意味着它可以封装业务逻辑和数据.我建议你避免贫血的领域模型.您甚至可以将模型设置为持久性无知.要了解我的意思,请查看有关Crafting Wicked Domain Models的演讲.

在视图和控制器方面,我建议始终使用所谓的视图模型,即使它感觉像是1对1映射.迟早你会发现模型实际上是不同的,你不想让View更负责任,然后将简单的View Model直接翻译成HTML或其他渲染格式.

然后,控制器作业只是在模型上执行行为并为视图创建视图模型.