文章出處

回到目錄

對于Sails來說,它的Model與數據庫對應,不過它并沒有采用目前比較流行的poco貧血模型,而是采用了類似DDD的充血模型,即它的數據實體里即有數據庫字段(屬性)而且還有方法,而模型里的方法主要用來修飾它的屬性,如屬性的有效性,屬性的賦值,插入前和更新前的動作等等,下面我們通過具體的實例代碼來說一下sails實體模型的用法。

一 定義一個Person實體

module.exports = {
autoPK:true,//這是默認值,可以省略 tableName:
'UserInfo', attributes: { name: { type: 'string', size: 255 }, sex: { type: 'integer', defaultsTo: 0 }, updateCount:{ type:'integer', defaultsTo: 0 } } };

二 對model相關參數的說明

通過上面的代碼我們知道了在sails中數據模型的類型,除了上面的string,integer,還有以下數據類型

  • float
  • text
  • date
  • datetime
  • boolean
  • binary
  • array
  • json

除了數據類型外,還有以下幾個知識點需要我們知道的

tableName:表示數據庫中數據表的名稱

defaultsTo:表示屬性的默認值

size:表示數據長度

email:可以添加對emial字段的約束,email:true

unique:表示這個字段在數據表中是唯一的標示,如用戶表,有些業務要求用戶名是唯一的,我們就可以利用unique這個特性,

primaryKey:可以讓我們把某個字段定義成數據表的主鍵,但在使用它時,要確保model的autoPK為false否則會有沖突(默認為true)

autoPK:是否自動生成主鍵字段id,true表示自動生成主鍵,false不生成,sails為各種數據庫訂制了主鍵生成規則,由mysql,sqlserver為自增主鍵,而mongodb為objectid主鍵

autoCreateAt:自動生成createAt字段,即添加時間

autoUpdateAt:自動生成updateAt字段,即當記錄有更新時,這個時間被自動更新

enum:表示某個字段可以以枚舉的形式保存,它所存儲的值為這個枚舉的某個元素

columnName:為實體指定特殊的數據表列名,這類似于tableName

三 beforeUpdate和beforeCreate的作用

通過上面代碼我們可以在數據添加前和更新上做一些事情,這也是充血模型的優勢,它將與屬性本身有關的邏輯寫到了屬性內容,而不是寫在service方法里,這有效的提高了對象的內聚性,也是面向對象的體現,下面的代碼在記錄更新時,對updateCount字段進行加1操作,代碼很簡單,但可以說明它的作用。

 beforeCreate: function (values, next) {
        values.password =  md5(values.password,"zzl");//添加記錄時,為密碼進行加密策略,這由于屬于密碼本身的特性,所以寫在這里比在業務代碼更合適/
        next();
    }
beforeUpdate: function (values, next) {//values這個對象是從前臺傳過來的對象 values.updateCount+=1; next(); }

這里要注意一點,你的values對象是前臺傳給service層的對象,不是從數據表里取出來的原始對象,這點要注意,有些想通過這個功能實現數據追蹤的,無法簡單實現!

 回到目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()