设为首页 收藏本站
查看: 833|回复: 0

[经验分享] 我的WEB设计契约--数据库篇之PostgreSQL特例

[复制链接]

尚未签到

发表于 2016-11-20 12:31:11 | 显示全部楼层 |阅读模式
  上文我的WEB设计契约--数据库篇是一个通用的契约,如果用PostgreSQL数据库引擎的话,情况会变的更好玩.
  PostgreSQL数据库的SQL语句有一个特性.
  如果在SQL语句中的表名,字段名没用双引号包裹的话,表名,字段名会自动转换为小写.
  这个特性可以对上文的契约进行一些优化,在书写代码和配置文件的时候会方便很多.
  可以把契约改成

  • 关联数组的key表示字段,value表示相关参数
  • key小写为SELECT/UPDATE的WHERE条件
  • key大写为INSERT的field值对定义
  • key混写为UPDATE的field值对定义
  • key=='*'为SELECT语句返回的字段
  • key=='@'为扩展的SQL语句,如limit,order等,当然里面还有细节的设计
  从提交的数据来分析到底要执行select/update/insert并不难(insert语句一般是没有where的),但是这个契约对写配置有什么方便的呢?
  当提交数据后,不管到底要执行那种操作,后台总要对数据进行校验和约束,先不说校验,先说约束,比如

  • 限制select的返回字段,也就是key=='*'的情况,需要定义返回字段限制scope=array('id','name')
  • 限制update字段,也就是key混写的情况,需要定义字段限制scope=array('Name')
  • 限制insert字段,也就是key大写的情况,需要定义字段限制scope=array('NAME'),id一般是自动的了
  那其实上面三个请求可以把scope写到一起array('id','name','Name','NAME')
  编写程序提取要返回的字段/updat的字段/insert的字段,然后和scope进行数组的运算,求交集/差集(或者直接判断是否相关值是否存在于scope数组中),判断就可以知道输入数据是否合法了,而生成的SQL语句无需考虑大小写问题.代码可以简化很多.
这种契约的意义呢!
一切都逻辑化了,库化了,
配置化了,通过配置来完成网站建设成为可能.常规后台数据编程低代码成为可能.
想想Google App Engine的复杂程度,再看看如果按照这种契约,对特定应用书写特殊的接口,在大多数应用中后台程序员可以"失业"了.再想想这算框架么?把上述契约代码化后,也没有几K,基于数据契约的框架,我觉得不能称为框架.基于此契约针对特定应用,完善各种特殊接口才能称为框架.

ps:
这是一种小技巧,我的出发点,用最低的代码成本,结构成本来完成常规需求

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302945-1-1.html 上篇帖子: PostgreSQL启动过程中的那些事三:加载GUC参数 下篇帖子: PostgreSQL:Java使用CopyManager实现客户端文件COPY导入
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表