MorningSpace Lab
深入浅出LoopBack
第二幕
进入Model的世界
—— 理解LoopBack的核心概念
Speaker: 赵剑云
March, 2018
我是谁?
赵剑云,IBM工程师。拥有多年软件开发工作经验,她于2008年加入IBM,先后致力于WebSphere Portal的测试和IBM Forms的开发,2015年加入IBM Connections,从事内容存储和管理的开发。目前带领技术团队从事内容存储及其管理功能的开发。
## 我们将了解到什么?
* 什么是Model?
* 如何定义Model?
* 如何定制Model?
* 如何验证Model?
* 如何为Model建立关联?
* 一个JavaScript对象
* 代表后端数据源
* 提供Node和REST的API接口
* 可以通过添加钩子(hook)扩展业务逻辑
* 支持数据验证
* 允许继承,或与其他Model建立关联
* 使用model generator
* 使用model discovery(用于已有的关系型数据库)
* 使用instance introspection(用于存储非结构化数据的NoSQL数据库或REST APIs)
* 手工定义Model
## 使用model generator
# 用于生成Model
$lb model
# 用于为Model添加属性
$lb property
## 与Model相关的几个文件
* myModel.json,JSON定义文件
* myModel.js,扩展Model的应用逻辑
* model-config.json,配置Model并指定数据源
## ☑︎ 任务清单
* 查看并理解Task Model的定义
* 修改model-config.json,只为Task暴露我们所期望的REST API
* 添加Note Model
* 修改Model定义文件,以对Model的定义进行定制
* 通过现有Model派生,以定义新的Model
* 编辑Model的JavaScript文件,以对逻辑进行定制
## ☑︎ 任务清单
* 修改Task Model的定义,如:为Task增加state属性
* 增加SharableTask,令其派生自Task
* 为Task Model增加业务逻辑,如:在持久化之前将title属性转换成大写
## validation方法
调用isValid()或新增Model与更新Model时触发:
* validatesAbsenceOf
* validatesExclusionOf
* validatesFormatOf
* validatesInclusionOf
* validatesLengthOf
* validatesNumericalityOf
* validatesPresenceOf
* validatesUniquenessOf
* validatesDateOf
## ☑︎ 任务清单
* 为Task Model增加验证逻辑
## Model的关联关系
* BelongsTo
* HasOne
* HasMany
* HasManyThrough
* HasAndBelongsToMany
* Polymorphic
* Embedded(embedsOne与embedsMany)
## ☑︎ 任务清单
* 为Task Model和Note Model建立关联