`
achun
  • 浏览: 314311 次
  • 性别: Icon_minigender_1
  • 来自: 河南郑州
社区版块
存档分类
最新评论

编程技巧,基于大小写的契约式编程

阅读更多

契约式编程就是说在开发中规定一套变量,函数以及数据的规则,所有代码都遵循此规则进行开发.这种方法其实是无处不在的.因为所有的代码都是有规则的.这些规则都可以称之为契约.
笔者在进行一些开发之后,对于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)

 

 

关键:由于契约数据的原因,这些语句都可以通过一定的算法自动生成

 

 

2
0
分享到:
评论
2 楼 achun 2008-10-28  
dayang2001911 写道

1. 纯小写表示 数据库 查询条件

2 . 纯 大写表示 数据库 提交数据

不懂了。

我的最终目的是这样的。
首先前后台通讯都有所谓的行为,不管这些行为是属于查询行为还是更新(插入数据也算)。
最终都要根据数据生成相应的sql代码。
可是对于相同的数据结构(就像文中提到的),要生成不同的
insert/select/update语句,
对于insert也许不需要条件,
对于select经常需要条件,而且对返回的字段也要求有不同的参数定义
对于update就更是条件和更新字段同时都要进行定义。
如何找一种数据契约可以自动满足上述的需求?
通过大小写的配合就是一种方案。
1 楼 dayang2001911 2008-10-28  
1. 纯小写表示 数据库 查询条件

2 . 纯 大写表示 数据库 提交数据

不懂了。

相关推荐

    Java编程规则

    方法或字段名则采用小驼峰式命名(camelCase),如`thisIsMethodOrFieldName`。此外,对于静态常量,推荐使用全部大写字母,并用下划线分隔单词,如`STATIC_FINAL_CONSTANT`。这些规则不仅提高了代码的可读性,也...

    java编程规范

    - 变量名和方法名采用小驼峰式命名,首字母小写,如methodName - 常量全大写,单词间用下划线分隔,如CONSTANT_NAME - 接口名与类名相同,但接口通常表示一种契约,首字母应大写,如InterfaceName 2.3 注释约定 - ...

    notepad.rar_C#编程_C#_

    C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的程序设计语言。不过,考虑到上下文,这里应该是想表达这个记事本程序是用C#语言实现的,而不是C++。 描述中还提到...

    反应式微服务框架Flower-flower.zip

    1. **反应式编程模型**:Flower支持反应式编程模型,利用非阻塞I/O和事件驱动机制,使得服务在面对大量并发请求时能高效地处理,避免了线程池的过度消耗。 2. **服务发现与注册**:Flower集成了服务发现机制,允许...

    java课件入门教程

    接口用于实现多继承和契约式编程,例如,`java.io.Serializable` 接口标记一个类可以被序列化。 5. **异常处理**:Java的异常处理机制使得程序能够优雅地处理错误。通过使用try-catch-finally块,你可以捕获和处理...

    c++要知道的一些东西.pdf

    * Dlib:使用契约式编程和现代 C++科技设计的通用的跨平台的 C++库。 * EASTL :EA-STL 公共部分 * ffead-cpp :企业应用程序开发框架 * Folly:由 Facebook 开发和使用的开源 C++库 * JUCE :包罗万象的 C++类库,...

    C++精华资料全集——云盘链接

    Dlib:使用契约式编程和现代C++科技设计的通用的跨平台的C++库。 EASTL :EA-STL公共部分。 ffead-cpp :企业应用程序开发框架。 Folly:由Facebook开发和使用的开源C++库。 JUCE :包罗万象的C++类库,用于开发跨...

    java基础

    接口用于实现多继承和契约式编程。 7. **异常处理**:Java提供了异常处理机制,通过try-catch-finally语句块捕获和处理程序运行时可能抛出的异常。 8. **集合框架**:Java集合框架包括List、Set和Map接口,以及...

    Java入门经典详解

    Java中的标识符用于命名变量、方法、类等,必须遵循一定的规则,如不能以数字开头,区分大小写。关键字则是具有特殊含义的保留词,如if、else、while、for等,它们不能用作标识符。 #### 数据类型 Java提供了丰富...

    C# coding standard

    - 类型和方法名称采用 PascalCase(帕斯卡式大小写)。 - 变量名采用 camelCase(驼峰式大小写)。 - 常量与静态只读字段采用 ALL_CAPS_WITH_UNDERSCORES(全部大写并用下划线分隔)。 - 构造函数名应与类名相同,并...

    WPF+WCF聊天ChatDemo

    **WCF(Windows Communication Foundation)** 是微软提供的一个全面、统一的编程模型,用于构建服务导向的应用程序。WCF集成了多种通信协议,如HTTP、TCP、SMTP等,支持不同平台之间的互操作性,并提供事务、安全性...

    Java_Interview_Questions.pdf

    在面试中,可能会询问如何高效地处理字符串,比如字符串比较、大小写转换、拼接、截取、替换以及正则表达式的应用。 六、集合框架 Java集合框架提供了一套性能优化的数据结构,如List、Set、Map等。面试中可能会...

    C#/VB .NET Coding Guidelines

    CamelCase(驼峰式大小写)一般用于变量名、属性名等。首字母小写,后续每个单词的首字母大写。 ##### 3.2.3 Uppercase 全大写主要用于常量命名,以及枚举中的项。所有字符都使用大写,并且使用下划线分隔单词。 #...

    C#完全手册

    - **自动转换**:当从较小的数据类型转换到较大的数据类型时发生的自动转换。 - **6.2 显式类型转换** - **强制转换**:需要显式指定的类型转换。 - **6.3 小结** - **转换规则**:总结不同情况下应使用的类型...

    Encodo C# Handbook

    - **大小写**:使用恰当的大小写来区分不同类型和成员。 - **艺术性的命名**:选择能够准确反映对象意图的名称。 - **命名空间**:使用具有描述性的短词组。 - **接口**:以 `I` 开头,后跟描述性的名词。 - **类...

Global site tag (gtag.js) - Google Analytics