下面举几个例子
需求是根据手机号和邀请码来判断该用户是否是有效的,继而完成之后的操作步骤。而数据库只有手机号和邀请码二个字段,那么我们需要怎么做呢?最简单的办法是把状态存在数据库里,加一个字段的事儿。这种方法很好,但对于一个代码洁癖爱好者来说是无法忍受的,明明手机号和邀请码已经可以表达了业务含义,为啥还要多加一个字段呢?
if(this.phone_number == undefined | this.invite_code == undefined){
return false;
}
return this.invite_code.length >= 2 && this.phone_number > 10000000
});
看一下具体测试,主要针对2种情况
- 当同时有invite_code和phone_number
- 当只有phone_number时
执行
$ cd db && ava -v virtual/test.js
数据库连接成功
✔ #is_valid() === true if user_with_invite_code
2 tests passed
把表拆了,重写?那太不划算了,好的做法是使用virtual属性对字段进行二次加工、转换、格式化等等操作。
这样就可以在不变表结构的情况下,增加province
,,county
,detail_address
,这是非常便捷的,无入侵的。
import test from 'ava';
// 1、引入`mongoose connect`
require('../connect');
// 2、引入`User` Model
const User = require('../user/virtual/user2');
// 3、定义`user` Entity
const user = new User({
username: 'i5ting',
password: '0123456789',
});
test.before.cb(t => {
User.remove({}, (err, result) => {
t.end()
})
})
test('#province city county detail_address', t => {
user.save((err, u) => {
t.is(u.province, '天津')
t.is(u.city, '天津')
t.is(u.county, '东丽区')
t.is(u.detail_address, '空港商务园')
});
执行