一、什么是链式操作

  把需要的下一步操作的对象通过上一步操作返回回来。使完成某些功能具有持续性。

二、链式操作优点

  代码更精简优雅。链式操作能大大精简代码量,多项操作一行代码一气呵成,搞定;

  链式操作应用场景除了想前端jquery方面的操作dom,后端web框架,在开发orm相关的框架也是常常用到

三、各种语言的链式操作实现

  以下根据简单的实现数据库查询的类似实现一些web框架的 orm。查询类的各种DEMO

  1、javascript 的链式操作大家最熟悉不过了,jquery 的整个框架就是链式操作实现,我这里写的demo 当然跟jquery 实现的思路不是一致的,jquery具体实现方式可以看jquery源码。

var Link = function (table){
this.sql = {
"table" : "",
"where" : " 1=1 ",
"limit" : 0,
"field" : ""
}
this.sql.table = table;
}
Link.prototype = {
where : function (where)
{
this.sql.where += " and "+ where;
return this;
},
field : function (field)
{
this.sql.field = field;
return this;
},
top : function (limit)
{
this.sql.limit = limit;
return this;
},
query : function ()
{
var sqlstr = "SELECT "+this.sql.field+" FROM "+this.sql.table
+" WHERE "+ this.sql.where+ " LIMIT 0,"+this.sql.limit;
return sqlstr;
}
} var db = new Link("user");
var $val = db.where(" id = 1")
.top(10)
.field(" id, username , password")
.query(); console.log($val);

2、C# 实现链式,主要通过其.net 框架提供的扩展方法,代码如下

using System;

namespace ConsoleApplication1
{
public class sqlHelp
{
public sqlHelp (string table) {
this.table = table;
}
public string where = "";
public string field = "";
public int limit = ;
public string table = "";
} static class LinkExtended
{
public static sqlHelp Where(this sqlHelp h, string where)
{
h.where += " and"+ where;
return h;
}
public static sqlHelp Top(this sqlHelp h, int limit)
{
h.limit = limit;
return h;
} public static sqlHelp Field(this sqlHelp h, string field)
{
h.field = field;
return h;
}
public static string Query(this sqlHelp h)
{
string sql = string.Format("SELECT {0} FROM {1} WHERE 1=1 {2} LIMIT 0, {3}",
h.field, h.table, h.where, h.limit);
return sql;
}
} class Program
{
static void Main(string[] args)
{ sqlHelp db = new sqlHelp("user");
string sql = db.Top()
.Field("id, username, password")
.Where(" id =1")
.Query(); Console.WriteLine(sql);
Console.ReadLine(); }
} }

3、php 实现链式操作可以使用php的魔术方法_call。但是我这里实现还是愿意一开始说的返回对象本身的思路没有用到_call。

<?php

class Link
{
static public $_garr= array(
'table'=>'',
'limit' =>0,
'where' => ' 1=1 ',
'field' => ' '
);
function __construct($table)
{
self::$_garr['table'] = $table ;
}
public function where($where='')
{
self::$_garr['where'].= ' and '.$where ;
return $this;
}
public function field($field)
{
self::$_garr['field'] = $field ;
return $this;
}
public function top($top)
{
self::$_garr['limit'] = $top;
return $this;
} public function query()
{
$sql_arr = self::$_garr;
$sql = "SELECT {$sql_arr['field']} FROM {$sql_arr['table']} WHERE {$sql_arr['where']} LIMIT 0, {$sql_arr['limit']}";
return $sql;
} };
$db = new Link("user");
$sql = $db->top(10)
->field("id, username, password ")
->where(" id = 1")
->query();
print($sql); ?>

4、asp(vbscript)这个我一直在网上搜索资料也没见有人写过, 我自认为我这里写出来的是全网第一份(当然可能人家有我没找到而已,呵呵所以自我陶醉下),因为vbscript 本身的类是非常弱的,但是

也提供了 defalut  和 me 这样好用的特性,所以实现链式也不是什么难事( 如果熟练vbscript 的朋友可以能会想到 with .. end with 语言 其实这个语言本身有点链式的味道,但是思路上不叫链式操作)

Class Link
'声明一个全局字典
Dim sqlD public Default function construct(table)
Set sqlD = CreateObject("Scripting.Dictionary")
Call sqlD.add("table", table)
Set construct = me
End function Public Function where(whereStr)
Call sqlD.add("where", whereStr)
Set Where = me
End Function Public Function top(limit)
Call sqlD.add("limit", limit)
Set top = me
End Function Public Function field(fieldStr)
Call sqlD.add("field", fieldStr)
Set field = me
End Function Public Function query()
Dim sql
sql = "SELECT "& sqlD.item("field")&" FROM "&sqlD.item("table")&" WEHRE "&sqlD.item("where")
query = sql
End function End Class Dim db, sql
Set db = (New Link)("user")
sql = db.top().field("id, username, password").Where(" id = 1").query()
msgbox sql

5、python 实现链式非常的方便简单

class Link:

    def __init__(self, table):
self.table = table def where(self, where):
self.where = 'and ' +where
return self; def field(self, field):
self.field = field
return self def top(self, top):
self.limit = top
return self; def query(self):
sql = 'SELECT '+self.field+' FROM '+self.table+' WHERE 1=1 '+ self.where+' limit 0,'+self.limit
return sql p = Link('user')
sql = p.top(str(10)).field('id, username, password').where('id=1').query()
print(sql)

四、其他需要待续

  echosong 在码农生涯中,暂时只用到了以上些语言,所以目前也只实现了以上的语言链式操作,欢迎大家补充其他语言链式操作demo

Javascript、C#、php、asp、python 等语言的链式操作的实现的更多相关文章

  1. C语言实现链式队列

    链式队列,简称"链队列",即使用链表实现的队列存储结构. 链式队列的实现思想同顺序队列类似,只需创建两个指针(命名为 top 和 rear)分别指向链表中队列的队头元素和队尾元素, ...

  2. C语言 队列 链式结构 实现

    一个C语言链式结构实现的队列 mQueue (GCC编译). /** * @brief C语言实现的链式队列 * @author wid * @date 2013-10-31 * * @note 若代 ...

  3. C语言 栈 链式结构 实现

    一个C语言链式结构实现的栈 mStack (GCC编译). /** * @brief C语言实现的链式结构类型的栈 * @author wid * @date 2013-10-30 * * @note ...

  4. C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...

  5. Python自动化--语言基础6--模块操作之re、MySQL、Excel

    1.Python自有模块正则 import re # re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None print(re.match("aaa ...

  6. Javascript 链式操作以及流程控制

    春节过后,感觉过年吃的油腻的食品转化的脂肪都长到 脑子去了. 根本转不动啊 上班第一天 实在是写不动代码了, 顺手打开多天为看的 收件箱,查看查看邮件,看看春节期间 风云变幻的前端圈又有哪些大事发生. ...

  7. C语言实现链式二叉树静态创建,(先序遍历),(中序遍历),(后续遍历)

    #include <stdio.h>#include <stdlib.h> struct BTNode{ char data ; struct BTNode * pLchild ...

  8. Javascript 优化项目代码技巧之语言基础(二)

        上一篇随笔介绍了如何正确判断对象类型.避免变量污染,特殊值(null.undefined.NaN)的使用,以及其他Javascript中常用关键字与方法的优化,这篇随笔将着重介绍Javascr ...

  9. 30个深度学习库:按Python、C++、Java、JavaScript、R等10种语言分类

    30个深度学习库:按Python.C++.Java.JavaScript.R等10种语言分类 包括 Python.C++.Java.JavaScript.R.Haskell等在内的一系列编程语言的深度 ...

随机推荐

  1. 折腾到死:matlab7.0 安装

    matlab7.0应该是2004年的东西了吧,装起来相当费劲!为什么不用更高的版本呢?其实我也想,之前安装的2013a安装包就5个多G,安装完之后就十多个G了.我习惯将软件安装到C盘,可怜我那100G ...

  2. web系统中上下移动功能的实现

    其实上移下移的思想分几步: 核心思想:交换两个记录的位置字段的值. 问题:如何根据当前记录,找到前一个或者后一个的记录的位置. 第一:在java类属性定义一个position位置字段,不同的位置pos ...

  3. 手脱FSG v1.33

    1.载入PEID FSG v1.33 (Eng) -> dulek/xt 2.载入OD,先F8跟一会 004103E3 > BE A4014000 mov esi,fsg1_33.0040 ...

  4. golang channel状态表

    如果我们查看该表,可以察觉到在操作中可能产生问题的地方.这里有三个可能导致阻塞的操作,以及三 个可能导致程序恐慌的操作. 乍看之下,通道的使用上限制很多,但在检查了这个限制产生的动机并熟悉 了通道的使 ...

  5. C#获取用户基本信息一(关注了公众号的用户)

    一.获取Code  假设我们需要网页授权的页面的地址为redirect_uri 需要获取Code的话我们第一步是跳转到授权地址,我们第一步便是获取拼接授权地址 --采用snsapi_base方式 pu ...

  6. 前端PHP入门-018-内置函数之文件包含函数

    在实际开发中,常常需要把程序中的公用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可.这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利. 在PHP中, 有require.r ...

  7. 前端PHP入门-009-匿名函数

    想想JavaScript当中是否有这个概念? 所谓匿名,就是没有名字. 匿名函数,也就是没有函数名的函数. 匿名函数的第一种用法,直接把赋数赋值给变量,调用变量即为调用函数. 匿名函数的写法比较灵活. ...

  8. Tensorflow在CIFAR-10构建CNN

    使用Tensorflow在CIFAR-10二进制数据集上构建CNN 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Tensorflow机器学习实战指南 利用Tensorflow读取 ...

  9. poi对word的操作(总结)

    ★★★ POI在读写word docx文件时是通过xwpf模块来进行的,其核心是XWPFDocument.    1.正文段落:一个文档包含多个段落Paragraph,一个段落包含多个Runs,一个R ...

  10. JVM调优总结:一些概念

    数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...