model一定是和数据库表对应的么?

Model既不绝对对应数据表,也不需要对应前端视图,Model对应的是“数据模型”这个抽象的概念 —— 状态和操作。

数据表是Model的存储实现,存储实现不一定只有数据表,可能用不同存储系统存放
数据分片,Model的作用就是掩盖这个底层细节,给上层代码一个统一稳定的接口。

前端视图需要Model的状态,但并不直接操作Model,这是Controller或者View做的事,所以本身并不直接决定Model的

设计。

Model的设计表面上同时对应数据表和前端视图,严格地说两者都不是Model设计的起因。Model实现“数据模型”这个抽象的概念。

Model 应该要和数据库表结构一致么?
以user为例子,假设前端呈现的user信息有某个字段不包含在user表内,而是要通过联合其他表多表查询得出。
这个时候后端UserModel应该:
1,和数据库保持一致,发送数据给前端前 整合数据(发送另一个user class)
2,和前端保持一致,在后端填充构造Model时就一步到位。(目前我是真么做的,Model里冗余了数据字段,未和数据表一一对应)
3,多造API,从前台整合数据。
4,在user表中添加一个字段
5,其他

应该采取什么样的方式呢?
或者是不是应该创建一个数据库视图?可以将view 作为数据源获取数据么?

不考虑修改成本。

新手,问得问题比较傻,如有错误,大家可以随意喷。。。但希望还是可以帮我解答一下,十分感谢!

所以才会提出MVVM啊
M = Model = 映射数据库结构
VM = ViewModel = 映射显示层需要的数据结构
V = View = 显示层本身

当然这个概念本来是给WPF和银光用的,所以放到web app上不完全合适。但是基

本概念没任何问题

在web app里边
V层就是你的前端,HTML+CSS+JS
VM就是你的web service返回值以及前端JS需要的数据结构
M就是你后台的数据映射

VM和M之间的转化就是你的web service
V和VM之间的关

系一般靠各种框架来解决,比如React或者Angular等等

至于你的VM和M怎么划分,那就是另一个问题了

结论:1、不一定一致,结构简单时可以一致
         2、划分为Model和ViewModel,会构建多个model

时间: 2024-11-05 04:13:29

model一定是和数据库表对应的么?的相关文章

对于多个数据库表对应一个Model问题的思考

最近做项目遇到一个场景,就是客户要求为其下属的每一个分支机构建一个表存储相关数据,而这些表的结构都是一样的,只是分属于不同的机构.这个问题抽象一下就是多个数据库表对应一个Model(或者叫实体类).有了这个问题,我就开始思考在现有的代码中解决问题,最早数据采集部分是用EF来做数据存储的,我查了一下,资料并不多,问了一下对EF比较熟悉的朋友,得出的结论是EF实现这个功能比较复杂,不易实现.EF不能实现就要去找其他的框架,在PDF.NET的讨论群跟大家讨论这个问题的时候,@深蓝医生说PDF.NET可

django使用model创建数据库表使用的字段

Django通过model层不可以创建数据库,但可以创建数据库表,以下是创建表的字段以及表字段的参数.一.字段1.models.AutoField 自增列= int(11) 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True.2.models.CharField 字符串字段 必须 max_length 参数3.models.BooleanField 布尔类型=tinyint(1) 不能为空,Blank=True4.

django根据已有数据库表生成model类

django根据已有数据库表生成model类 创建一个Django项目 django-admin startproject 'xxxx' 修改setting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'sqlexam', 'USER': 'root', 'PASSWORD': 'root123456'

Django-根据数据库表生成 model 类

根据数据库表生成 model 类 创建一个Django项目 django-admin startproject 'xxxx' 修改setting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'sqlexam', 'USER': 'root', 'PASSWORD': 'root123456', 'HOS

hibernate 自动生成数据库表

只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表 <property name="hibernate.hbm2ddl.auto">update</property> update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失.

Hibernate自动生成数据库表

在hibernate.cfg.xml中添加: 引用 <properties> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> value的值可选项如下: 引用 validate  加载hibernate时,验证创建数据库表结构 create  每次加载hibernate,重新创建数据库表结构. create-drop  加载hibern

PowerDesigner中SQL文件、数据库表反向生成PDM

1      反向生成PDM 1)        创建一个空的PDM模型(选择对应的DBMS): 2)        选择[Database]--[Update Model from Database-]菜单: 1.1    使用SQL文件 1)        在新窗口选择对应[Using script files]--[(Add Files)].然后再弹出窗口选择对应的SQL文件.点击打开,完成选择. 2)        点击[确定]生成. 1.2    使用数据源 1)        选择数

activiti数据库表结构全貌解析

下面本人介绍一些activiti这款开源流程设计引擎的数据库表结构,首先阐述:我们刚开始接触或者使用一个新的东西(技术)时我们首先多问一下自己几个为什么?为什么activiti在工作流程领域这么流行呢?仅仅是因为开源么?实现如此强大的流程引擎,activiti底层设计是如何进行的?activiti中依赖哪些技术等?这些可能应该是那些刚接触这个开源流程引擎产品的人应该有的疑问.我们在用开源产品的都是其实应该多问自己为什么?这样才能有所进步,不是么?兴许你一时兴起,“起笔”就把一款属于你自己的开源作

Android数据库表的创建和数据升级操作

之前的文章有提到,可以在xml文件中配置数据库信息:http://www.cnblogs.com/wenjiang/p/4492303.html,现在就讲如何利用这些信息类构建数据库. xml文件大概如下: <?xml version="1.0" encoding="utf-8"?> <database> <!-- 数据库名称 --> <dbname value="zwb.db"></dbna