扫码关注官方订阅号
这是原始状态
封装后判断是这样的
小伙看你根骨奇佳,潜力无限,来学PHP伐。
还是有意义、比如你的formName变量名改了、你只需要改动一处就可以了、不然要每行都改、
再比如、你传进来的name要根据规则做个字符串拼接、也只需要改一处、
函数的封装是为了维护方便、前期多花功夫是为了后面不让自己难受、希望可以帮到你
下次多个字段岂不是又要加一句 else if?
else if
试着把检验的字段和返回的信息抽离出来, 是否更好一点?如下(未测试代码正确性):
var fields = { name: { required: '请输入公司名称' }, principalEmail: { email: '请输入正确的负责人邮箱' } }; function check(formName) { var i, ii, field; for(i in fields) { if(fields.hasOwnProperty(i)) { field = fields[i]; for(ii in field) { if(field.hasOwnProperty(ii)) { if(formName[i] && formName[i].$error.[ii]) { return formName[i].$error.[ii]; } } } } } return null; } var tips = check(formName); if(tips) { promptLayer({str: tips}); } else { addMember.addMember(); }
没意义。 有了封装的意识, 但是没做好。我会这样写:
// 代码没有仔细写,有点乱,不过应该不影响理解。 // 数据 const check = { name: [{ msg: '请输入公司名称', checkItem: 'required' }], principalEmail: [{ msg: '请输入负责人的邮箱', checkItem: 'required' }, { msg: '请输入正确的负责人的邮箱', checkItem: 'email' }] }; // 逻辑 for(var k in check) { for(var i = 0, len = check[k].length; i < len; i++) { if(formName[k].$error[check[k][i].checkItem]) { promptLayer({str: check[k][i].msg}); } } }
为什么这样写呢? 程序由逻辑和数据组成,所以,要把数据和逻辑分开来。 按照我的代码, 如果验证项需要修改,只要改数据就好了。逻辑只要测过一遍,就可以保证正确(还可以使用单元测试来保证正确)。 还有就是,逻辑可以被不同业务所复用,只要传入对应业务的数据就好。
封装有意义, 如果check的条件改动只需要改check函数一处。
不过还可以进一步改。
const actions = [ ['name', '公司名称'], ['principal', '负责人'] // ... 其他数据 ] let match = false for (let i = 0; i < actions.length; i++) { match = check(actions[i][0]) if (match) { promptLayer(actions[i][1]) break } } if (!match) { addMember.addMember() }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
还是有意义、比如你的formName变量名改了、你只需要改动一处就可以了、不然要每行都改、
再比如、你传进来的name要根据规则做个字符串拼接、也只需要改一处、
函数的封装是为了维护方便、前期多花功夫是为了后面不让自己难受、希望可以帮到你
下次多个字段岂不是又要加一句
else if?试着把检验的字段和返回的信息抽离出来, 是否更好一点?
如下(未测试代码正确性):
没意义。 有了封装的意识, 但是没做好。
我会这样写:
为什么这样写呢?
程序由逻辑和数据组成,所以,要把数据和逻辑分开来。
按照我的代码, 如果验证项需要修改,只要改数据就好了。逻辑只要测过一遍,就可以保证正确(还可以使用单元测试来保证正确)。
还有就是,逻辑可以被不同业务所复用,只要传入对应业务的数据就好。
封装有意义, 如果check的条件改动只需要改check函数一处。
不过还可以进一步改。