契约式编程就是说在开发中规定一套变量,函数以及数据的规则,所有代码都遵循此规则进行开发.这种方法其实是无处不在的.因为所有的代码都是有规则的.这些规则都可以称之为契约.
笔者在进行一些开发之后,对于web开发中的数据查询,数据更新,数据条件的通讯,痛恨之极,因为要根据需求的不同细致按照行为的不同去分别用不同的方法处理这些数据.比如有这样的数据传向后台
{ name:"you", pw:1234 }
仅仅看这些数据,我们无法认定这些数据是让后台查询的还是更新的.因为这和对应的行为有关,
如果行为是login,那应该是查询,如果行为是updatepw那应该是更新.
那能不能找到一种方法,制定一个契约,来让这件事情更方便一些?
笔者想到了一种方法:
基于大小写的契约
对于数据库字段名来说,统一大小写不是问题
所以可以这样设计契约(反之亦然):
1. 纯小写表示 数据库 查询条件
2 . 纯 大写表示 数据库 提交数据
3.大小写混合表示非数据库字段
当然代码要配套的检查大小写的区别.具体代码不是问题,这和你的应用架构有关,不过此契约可以简化很多东西,关键这是一种可以模式化的契约
=========ps========
我来举几个例子:
{name:"you",pw:1234}
表示查询条件为 name='you' and pw='1234',但是没有规定返回的字段范围
{name:"you",pw:1234,Filds:"name,id,age"}
这回就有了,很明显Filds是大小写混合的,所以经代码处理后可以用来确定要返回的字段(当然要处理权限的问题了,这个不在本文中讨论 ),这样就可以的到这样的语句(当然表的名字和请求的行为是绑定的 )
select name,id,age from youtabl where name='you' and pw='1234'
{name:"you",PW:1234}
很明显这个就可以对应update语句了
update youtable set PW=1234 where name='you'
{NAME:"you",PW:1234}
同理这个可以对应
insert into youtable (name,pw) VALUES('you',1234)
关键:由于契约数据的原因,这些语句都可以通过一定的算法自动生成