Atitit 提升可读性 流畅接口

1.1. 大接口vs 小接口 小接口可用流畅api串接起来 1

1.2. 部分comm fun可用大接口固化 1

2. 流畅接口 方法连 “Fluent接口 链接机制 2

2.1. 链接机制 2

2.2. 单身链 2

2.3. 实例链接 3

2.3.1. 每个函数都必须返回“this” 每个函数应该返回什么以确保可以调用下一个函数? 3

3. 流畅接口的其他市县 3

3.1. 基本语义抽象 3

3.2.  管道抽象 方法连 4

3.3. 层次结构抽象 4

3.4. 4. 异步抽象 6

3.5. Dsl 7

4. Q其他实现模式 7

4.1. Builder patter 7

4.2. 内部嵌套  Builder 7

4.3. Guava 流畅接口 7

4.4. Functin 接口 7

4.5. Jdk8 stream api 7

4.6. Linq接口 Sql接口 7

5. 参考资料 7

1.1. 大接口vs 小接口 小接口可用流畅api串接起来

1.2. 部分comm fun可用大接口固化

很多人将链式调用等同于流畅接口。然而链式调用是流畅接口的一种常用方法,真实的流畅接口不止这么一点点

2. 流畅接口 方法连 “Fluent接口 链接机制

(List) strService .newx(). findV2(strService.mybatisParamTmplt, sql).mybatsiParamsNoWarp().getRztLi();

jQuery的一个吸引人的功能就是你可以建立一系列命令的方式,看起来就像你使用语言的方式。这通常被称为“Fluent接口”,并且在JavaScript中实现并不困难。

Eric Evans 和Martin Fowler 首先提出了流畅界面的概念,以表达面向对象API的概念。该技术使用方法链,但如果您想将其称为流畅接口,则它还必须具有特定于域的语言的特征。简而言之,这些方法链接在一起必须表达自然的操作集合。理想情况下,方法链应该看起来像你正在写一个带有动词和修饰符的小程序。

2.1.  链接机制

链接的原则是每个函数都必须返回一个对象,该对象支持链中的下一个函数作为方法。

这就是所有功能链

2.2. 单身链

在讨论更复杂的例子之前,让我们来看看另一个简单的例子 - 单例链接。

单例是一个不是由构造函数创建的JavaScript对象 - 它是一个对象文字。

在这种情况下,我们想要做的是允许将每个函数定义为同一对象的一个方法 - obj说。为了允许链接,我们必须安排每个方法返回一个对象,每个后续函数都定义在这个对象上,在这种情况下,它只是obj。这真的很简单

2.3. 实例链接

单例可能非常有用,但我们通常希望能够根据需要创建一个对象的多个实例,在这种情况下,我们必须继续查看实例链接

2.3.1. 每个函数都必须返回“this” 每个函数应该返回什么以确保可以调用下一个函数?

在这种情况下,每个函数都必须返回“this”,因为当函数被调用时,“this”引用该函数是其方法的实例。

我们必须解决的第一个问题是,与不流畅的计算方法不同,我们的函数不能返回计算结果。实际上,结果必须存储为calc对象的状态。这是使用函数链接的另一种常见模式 - 过去常常必须将内容结构化到对象的状态中。

c.setValue(100).sqrt().display().square().display().times(3).display();

你可以看到它开始看起来像一种特殊语言的程序。

3. 流畅接口的其他市县

3.1. 基本语义抽象

重要的是应该体会到它们从一定程度上跳出了语言基本抽象机制的束缚,我们不应该再用类职责划分、迪米特法则(Law of Demeter)等OO设计原则来看待它们。

3.2.  管道抽象 方法连

jQuery的链式调用设计也具有管道的风格,方法链上流动的是同一类型的jQuery对象,每一步方法调用是对对象的一次作用,整个方法链将各个方法的作用叠加起来。

3.3. 层次结构抽象

除了管道这种“线性”结构外,流畅接口还可用于构造层次结构抽象。比如,用Javascript动态创建创建下面的HTML片段:

HTML片段:

<div id="’product_123’" class="’product’"><img src="’preview_123.jpg’" alt="" /><ul>

<li>Name: iPad2 32G</li>

<li>Price: 3600</li></ul></div>

若采用Javascript的DOM API:

//Javascriptvar div = document.createElement('div');

div.setAttribute(‘id’, ‘product_123’);

div.setAttribute(‘class’, ‘product’);

var img = document.createElement('img');

img.setAttribute(‘src’, ‘preview_123.jpg’);

div.appendChild(img);

var ul = document.createElement('ul');var li1 = document.createElement('li');var txt1 = document.createTextNode("Name: iPad2 32G");

li1.appendChild(txt1);

div.appendChild(ul);

而下面流畅接口API则要有表现力得多:

//Javascript

var obj =

$.div()

.img()

.ul()

.li().text(‘Name: iPad2 32G’)._li()

.li().text(‘Price: 3600’)._li()

._ul()

._div();

3.4. 4. 异步抽象

流畅接口不仅可以构造复杂的层次抽象,还可以用于构造异步抽象。在基于回调机制的异步模式中,多个异步调用的同步和嵌套问题是使用异步的难点所在。有时一个稍复杂的调用和同步关系会导致代码充满了复杂的同步检查和层层回调,难以理解和维护。这个问题从本质上讲和上面HTML的例子一样,是由于多数通用语言并未把异步作为基本元素/语义,许多异步实现模式是向语言的妥协。针对这个问题,我用Javascript编写了一个基于流畅接口的异步DSL,示例代码如下

3.5. Dsl

4. Q其他实现模式

4.1. Builder patter

4.2. 内部嵌套  Builder 

4.3. Guava 流畅接口

4.4. Functin 接口 

4.5. Jdk8 stream api

4.6. Linq接口 Sql接口

5. 参考资料

链接 - JavaScript中流畅的接口.html

API设计:用流畅接口构造内部DSL - SegmentFault 思否.html

如何设计一个好的接口 - 简书.html

如何设计一个好的接口 - 简书.html

如何设计一个好的接口1

前言2

避免过度封装2

见名知意3

仅把必要的工作交给客户程序员3

充分保证程序的可扩展性4

简洁4

百分比原则4

文档表述要清晰4

总结4

这5个事项让你设计出良好开发接口-电子发烧友网.html todo

Atitit 提升可读性 流畅接口 1.1. 大接口vs 小接口 小接口可用流畅api串接起来 1 1.2. 部分comm fun可用大接口固化 1 2. 流畅接口 方法连 “Fluent接口相关推荐

  1. C#相等性 - 三个方法和一个接口

    C#相等性 - 三个方法和一个接口 简介 C#(.NET)的object类里面有三个关于判断相等性的方法: public virtual bool Equals(object obj) public ...

  2. Java方法工厂,接口,常用日期类Date面向对象,匿名内部类局部类

    抽象 1抽象类不能生成对象 2类中包含抽象函数,这个类必须声明为抽象类 3抽象类不一定有抽象方法.有抽象方法必须是抽象类 4若全是抽象方法,则为接口 接口 比如 interface action{vo ...

  3. Go 学习笔记(35)— Go 接口 interface (接口声明、接口初始化、接口方法调用、接口运算、类型断言、类型查询、空接口)

    1. 接口概念 接口是双方约定的一种合作协议.接口实现者不需要关心接口会被怎样使用,调用者也不需要关心接口的实现细节.接口是一种类型,也是一种抽象结构,不会暴露所含数据的格式.类型及结构. 接口内部存 ...

  4. 30分钟入门Java8之默认方法和静态接口方法

    2019独角兽企业重金招聘Python工程师标准>>> 30分钟入门Java8之默认方法和静态接口方法 作者:@JohnTsai 本文为作者原创,转载请注明出处:http://www ...

  5. Spring-方法注入lookup、方法替换MethodReplacer接口

    问题 lookup方法注入 概述 实例 方法一 通过在配置文件中配置的方式实现 方法二 通过实现接口代码的方式实现 小结 方法替换MethodReplacer接口 概述 实例 小结 总结 问题 无状态 ...

  6. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  7. cmd 调用webservice接口_c# 三种方法调用WebService接口

    1.引用*.wsdl文件 WebService服务端会提供wsdl文件,客户端通过该文件生成.cs文件以及生成.dll. 注意:若服务端只提供的了URL,在URL后面加上"?wsdl&quo ...

  8. OOP 中的 方法调用、接口、鸭式辩型、访问者模式

    2019独角兽企业重金招聘Python工程师标准>>> 方法调用的四种方式 直接调用:通过类或者实例直接调用其方法. 接口调用或者转型调用:通过将实例回调给一个接口对象,或者转型为一 ...

  9. [C#]struct如何支持虚方法覆盖和接口继承

    我还没有研读<CLR Via C#>之类的专著,只是心里有了疑问,然后就去个人探究,下文多为猜想.更希望了解内幕的朋友告知C#后台真相. 我自个儿琢磨出来的结论:形如 1 // 原始声明 ...

  10. 零基础入门 自学 JAVA SE 基础篇(九)instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface)

    JAVA SE自学 基础篇 多态 instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface) 目标 父类型与子类型之间的转换及instanceo ...

最新文章

  1. 关于curl: (2) Failed Initialization
  2. 有关STM32外设配置的几个常见问题
  3. netif_start_queue/netif_wake_queue/netif_stop_queue
  4. 【C++grammar】继承与构造
  5. git 拉取代码失败
  6. 固态硬盘—国内视频行业的暂时救星?
  7. js里css不起作用,CSS文件在NODE js中不起作用
  8. VMware esxi 4.0如何更换序列号
  9. mahout中kmeans算法和Canopy算法实现原理
  10. 衰退的爱立信,进击的华为
  11. CentOS 6.6 nginx PHP 配置
  12. 画活动图教程_怎么用sai画出干净的线稿?超详细的sai动漫线稿教程
  13. 电脑qq浏览器怎么滚动截长图_电脑上如何滚动截屏长图?这样做最简单
  14. Comsol学习——经典案例:水净化反应器
  15. 最新高级JAVA架构师之路(价值3万元+年薪百万计划)
  16. 【装机必看】CPU该怎么选
  17. Ruby On Rails的傻瓜安装
  18. 数字孪生是什么?【深度解析】
  19. 计算机光驱图标符号,电脑不显示光驱图标怎么解决
  20. BackTrack3 安装记录

热门文章

  1. mysql group by聚合字段合并_mysql groupby 字段合并问题(group_concat)
  2. 2016计算机二级java_2016年计算机二级《JAVA》考试练习题
  3. OpenGL学习笔记(3) 纹理
  4. 来自联通302的问候
  5. algorithm头文件中的函数:remove()与remove_if() 函数,……
  6. Mybatis学习笔记-一级缓存与二级缓存
  7. Java中HttpURLConnection使用代理服务器
  8. wordpress无法建立目录 是否上级目录没有写权限?解决办法
  9. 2011-10-10
  10. MySQL-快速入门(15)MySQL Replication,主从复制