数据与模型篇

优质
小牛编辑
120浏览
2023-12-01

无论是MVC、MVP或者MVVP,都离不开这些基本的要素:数据、表现、领域。

数据

信息源于数据,我们在网站上看到的内容都应该是属于信息的范畴。这些信息是应用从数据库中根据业务需求查找、过滤出来的数据。

数据通常以文件的形式存储,毕竟文件是存储信息的基本单位。只是由于业务本身对于Create、Update、Query、Index等有不同的组合需求就引发了不同的数据存储软件。

如上章所说,View层直接从Model层取数据,无遗也会暴露数据的模型。作为一个前端开发人员,我们对数据的操作有三种类型:

  1. 数据库。由于Node.js在最近几年里发展迅猛,越来越多的开发者选择使用Node.js作为后台语言。这与传统的Model层并无多大不同,要么直接操作数据库,要么间接操作数据库。即使在NoSQL数据库中也是如此。
  2. 搜索引擎。对于以查询为主的领域来说,搜索引擎是一个更好的选择,而搜索引擎又不好直接向View层暴露接口。这和招聘信息一样,都在暴露公司的技术栈。
  3. RESTful。RESTful相当于是CRUD的衍生,只是传输介质变了。
  4. LocalStorage。LocalStorage算是另外一种方式的CRUD。

说了这么多都是废话,他们都是可以用类CRUD的方式操作。

数据库

数据库里存储着大量的数据,在我们对系统建模的时候,也在决定系统的基础模型。

在传统SQL数据库中,我们可能会依赖于ORM,也可能会自己写SQL。在那之间,我们需要先定义Model,如下是Node.js的ORM框架Sequelize的一个示例:

var User = sequelize.define('user', {
  firstName: {
  type: Sequelize.STRING,
  field: 'first_name' // Will result in an attribute that is firstName when user facing but first_name in the database
  },
  lastName: {
  type: Sequelize.STRING
  }
}, {
  freezeTableName: true // Model tableName will be the same as the model name
});

User.sync({force: true}).then(function () {
  // Table created
  return User.create({
  firstName: 'John',
  lastName: 'Hancock'
  });
});

像如MongoDB这类的数据库,也是存在数据模型,但说的却是嵌入子文档。在业务量大的情况下,数据库在考验公司的技术能力,想想便觉得Amazon RDS挺好的。

建模