问题标签 [fluent-interface]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
1138 浏览

.net - 返回 this 而不是 void 有什么缺点吗?

说不是返回 void 方法,而是返回对类的引用,即使它没有任何特定的语义意义。在我看来,它会给你更多关于如何调用方法的选择,允许你以类似流畅的界面风格使用它,我真的想不出任何缺点,因为你不需要做任何事情与返回值(甚至存储它)。

因此,假设您处于想要更新对象然后返回其当前值的情况。而不是说

你将能够结合这两行说


编辑: 我一时兴起问了下面的问题,回想起来,我同意这可能是不必要的和复杂的,但是我的问题是关于返回这个而不是无效的立场。

在相关的说明中,你们如何看待让该语言包含一些新的语法糖:

此运算符的优先级较低,因此 myObj.Update() 将首先执行,然后在 myObj 上调用 GetCurrentValue(),而不是 Update 的 void 返回。

本质上,我在想象一个运算符,它会说“在左侧第一个有效对象上调用运算符右侧的方法”。有什么想法吗?

0 投票
2 回答
1781 浏览

api - 如何访问 Castle Windsor 的 Fluent Interfaces API?

在让 Castle Windsor 的非 xml 配置正常工作时,我遇到了很多问题。与此同时,我看到越来越多的人通过 Windsor Container 流畅的界面提供建议。最后一天我一直在谷歌搜索,但我在任何地方都找不到这个 API。

我说的是关键的 .Register() 方法,它似乎是 IWindsorContainer 对象的扩展方法。似乎它可能在 Castle.MicroKernel.Registration 命名空间中,但我在任何地方都找不到相应的库!

另外,有什么地方可以找到这些东西的文档吗?


编辑: 我发现这里的示例项目中的 Castle.MicroKernel 副本比我使用的命名空间多(即使这个比我使用的要大 8 天,v1.0.0 而我的是 v1.0.3...),仍然无法找到 .Register() 方法或任何示例。

编辑:在 Bitter Coder 找到了一些流畅的界面示例,但没有可下载的示例,所以我仍然不知所措。

再次编辑:终于明白了。城堡温莎最新的源代码在这里,获取最新的成功构建,zip文件里面是一个bin目录。流畅的接口位于 Castle.Microkernel 内部(您可能还需要引用 Castle.Dynaproxy、Castle.Dynaproxy2 和 Castle.Windsor)。

PS这篇文章是“城堡流利的界面文档”的#1谷歌结果伤心的家伙,你需要继续下去。 蟋蟀啁啾那是什么?美好的。让我弄清楚这一点,然后我会继续下去。

0 投票
3 回答
3703 浏览

nhibernate - 为 NHibnernate 结合 Fluent 和 XML 映射

我刚刚爱上了 NHibernate 和流畅的界面。后者通过重构支持实现了非常好的映射(不再需要 xml 文件)。

但是没有人是完美的,所以我错过了流利的多对任意映射。有人知道它是否已经存在吗?如果是这样,一个简单的代码行会很好。

但要坚持问题的标题,有没有办法结合流畅和正常的 NHibernate 映射。

目前,我将以下几行用于我的测试设置 WITH fluent,以及我的测试的第二个代码块,而不使用 fluent(使用 XML 映射)。我怎么能告诉流利使用流利的 IF AVAILABLE 和 XML 否则......

没有流利...

就是这样……克里斯

PS:我真的很喜欢这个网站,界面非常完美,所有文章的质量都令人难以置信。我认为这将是巨大的:-) 必须注册...

0 投票
14 回答
25054 浏览

python - 你能在 Python 的核心类型上修改补丁方法吗?

Ruby 可以向 Number 类和其他核心类型添加方法以获得如下效果:

但似乎 Python 无法做到这一点。这是真的?如果是这样,为什么?这与无法修改类型的事实有关吗?

更新:与其谈论猴子补丁的不同定义,我只想关注上面的例子。正如你们中的一些人回答的那样,我已经得出结论,它不能做到。但我想更详细地解释为什么它不能完成,如果 Python 中可用的话,也许有什么功能允许这样做。

回答你们中的一些人:我可能想要这样做的原因仅仅是美学/可读性。

这读起来更像英语,并清楚地表明哪个是测试值,哪个是预期值,应该是:

这个概念是Rspec和其他一些 Ruby 框架所基于的。

0 投票
2 回答
1723 浏览

c# - C#中的流利接口

我对流畅的界面有疑问。

我们有一些对象用作 SQL 接口的参数对象,下面是一个示例:

对于其中一些参数,我想启用一些专门的选项,但不是向 Int32 方法添加更多属性(这只是其中之一),我想我会研究流利的接口。

这是我添加了我正在研究的内容的示例:

我知道这两个选项对于这种类型的参数没有意义,但这不是问题所在。

在上述情况下,Substitute 必须是 SqlParameterOption 类上的静态属性(或方法,如果我只是添加一些括号),而 Precision 必须是实例方法。

如果我重新排序它们会怎样?

那么 Substitute 必须是实例属性,Precision 是静态方法。这当然不会编译,我不能同时拥有同名的静态和非静态属性或方法。

我该怎么做呢?我在这里完全走错了吗?

在重新阅读问题时,我有一个想法,下面这种不同的语法会更有意义吗?

在这种情况下,两者都将是任何 With 返回的实例方法,这将是此类 SqlParameter 选项的专用类或接口。我不确定我是否想转储.With部分,因为这会暴露对象的所有方法,而不仅仅是流利的方法。

建议和一些好的 url 将是最受欢迎的,我已经搜索了很多例子,但他们倾向于展示这样的例子:

(从此页面解除)


编辑@marxidad回复后的跟进:

使用这种方法,With 必须获取对象,并将其应用于参数。我很好。

如果我使用我添加的语法作为示例,它将是这样的:

在这种情况下,With 不知道链何时结束,因此每个选项都必须直接应用其效果。

什么是首选?选项会构建一个稍后必须应用的效果对象,还是每个效果都直接应用其效果?

我的决定:正如@marxidad所说,如果更改是不可逆转的,并且可能会发生逆转,那么建立状态并在某个时候出现异常失败是我要走的路。

但是,在这种情况下,我将采用一种更简单的方法,直接修改 SqlParameter 对象。

在这种情况下,我的代码将如下所示:

编辑:啊,当我只专注于一件事时,情况就是这样。

我不能使用该语法,我将按照@marxidad的建议使用以下内容:

原因当然是把SqlParameter对象作为参数的方法无法处理With返回的对象,所以虽然SqlParameter对象的构造和设置得当,但还是与预期的用法不兼容。

0 投票
8 回答
16247 浏览

c# - 在 C# 3 中编写流畅接口的技巧

我正在寻找一些关于 C# 中流畅接口的好技巧。我自己只是在学习,但很想听听我正在阅读的文章之外的其他人的想法。特别是我追求:

  1. 什么时候流利太多了?
  2. 有没有流畅的图案?
  3. C# 中有什么使流畅的接口更流畅(例如扩展方法)
  4. 复杂的流畅界面仍然是流畅的界面吗?
  5. 重构以达到流畅的界面或重构现有的流畅界面
  6. 您使用过或可以推荐的任何好的例子?

如果您可以发布一个提示或想法,或者每个帖子的任何内容。我也想看看他们是如何被投票的。

先感谢您。

0 投票
1 回答
813 浏览

c# - EBNF 到流畅的界面

我最近需要为 C# 编写一个流畅的接口,它本质上将镜像 SQL。是的,我知道 LINQ to SQL,但我对“更接近金属”很感兴趣——C# 中拥有的东西基本上只提供了一个 Intellisensified SQL shim。

例如,

现在,我在想这个概念可以被推广——也就是说,一个通用的 EBNF 到流利的接口生成器怎么样?有谁知道这样的野兽是否存在?

0 投票
8 回答
12999 浏览

language-agnostic - Fluent 接口 - 方法链

方法链是我知道构建流畅接口的唯一方法。

这是 C# 中的一个示例:

那么其他人如何创建流畅的界面。你如何创造它?需要什么语言/平台/技术?

0 投票
3 回答
3836 浏览

.net - MSTest 是否有流畅的断言 API?

我最近接触了 nUnit 中的流利界面,我喜欢它;但是,我正在使用 msTest。

有谁知道是否有一个流畅的接口是测试框架不可知的还是用于 msTest 的?

0 投票
4 回答
464 浏览

coding-style - 使用 return 语句效果很好!

当我使用返回值创建方法时,我通常会尝试进行设置,以便永远不会出现以必须返回某些默认值的方式调用该方法的情况。当我开始的时候,我经常会编写一些方法来做某事,或者返回他们所做的事情,或者如果他们没有做任何事情,就会返回 null。但我讨厌在我的代码中到处都是丑陋的if(!null)陈述,

我正在阅读我很多个月前阅读的实用程序员的 ruby​​ 重新指南,我注意到他们经常返回self(ruby's this),而他们通常不会返回任何东西。他们说,这是为了能够链接方法调用,就像在这个例子中使用返回他们设置属性的对象的 setter 一样。

起初我觉得这种东西很有吸引力。有几次我很高兴能够链接方法调用,Player.getHand().getSize()但这有点不同,因为方法调用的对象一步一步地变化。

Stack Overflow 对返回值有什么看法?当您想到返回值时,是否有任何模式或习语会温暖地浮现在脑海中?有什么好方法可以避免挫败感和增加美感?