问题标签 [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.
.net - 返回 this 而不是 void 有什么缺点吗?
说不是返回 void 方法,而是返回对类的引用,即使它没有任何特定的语义意义。在我看来,它会给你更多关于如何调用方法的选择,允许你以类似流畅的界面风格使用它,我真的想不出任何缺点,因为你不需要做任何事情与返回值(甚至存储它)。
因此,假设您处于想要更新对象然后返回其当前值的情况。而不是说
你将能够结合这两行说
编辑: 我一时兴起问了下面的问题,回想起来,我同意这可能是不必要的和复杂的,但是我的问题是关于返回这个而不是无效的立场。
在相关的说明中,你们如何看待让该语言包含一些新的语法糖:
此运算符的优先级较低,因此 myObj.Update() 将首先执行,然后在 myObj 上调用 GetCurrentValue(),而不是 Update 的 void 返回。
本质上,我在想象一个运算符,它会说“在左侧第一个有效对象上调用运算符右侧的方法”。有什么想法吗?
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谷歌结果伤心的家伙,你需要继续下去。 蟋蟀啁啾那是什么?美好的。让我弄清楚这一点,然后我会继续下去。
nhibernate - 为 NHibnernate 结合 Fluent 和 XML 映射
我刚刚爱上了 NHibernate 和流畅的界面。后者通过重构支持实现了非常好的映射(不再需要 xml 文件)。
但是没有人是完美的,所以我错过了流利的多对任意映射。有人知道它是否已经存在吗?如果是这样,一个简单的代码行会很好。
但要坚持问题的标题,有没有办法结合流畅和正常的 NHibernate 映射。
目前,我将以下几行用于我的测试设置 WITH fluent,以及我的测试的第二个代码块,而不使用 fluent(使用 XML 映射)。我怎么能告诉流利使用流利的 IF AVAILABLE 和 XML 否则......
没有流利...
就是这样……克里斯
PS:我真的很喜欢这个网站,界面非常完美,所有文章的质量都令人难以置信。我认为这将是巨大的:-) 必须注册...
python - 你能在 Python 的核心类型上修改补丁方法吗?
Ruby 可以向 Number 类和其他核心类型添加方法以获得如下效果:
但似乎 Python 无法做到这一点。这是真的?如果是这样,为什么?这与无法修改类型的事实有关吗?
更新:与其谈论猴子补丁的不同定义,我只想关注上面的例子。正如你们中的一些人回答的那样,我已经得出结论,它不能做到。但我想更详细地解释为什么它不能完成,如果 Python 中可用的话,也许有什么功能允许这样做。
回答你们中的一些人:我可能想要这样做的原因仅仅是美学/可读性。
这读起来更像英语,并清楚地表明哪个是测试值,哪个是预期值,应该是:
这个概念是Rspec和其他一些 Ruby 框架所基于的。
c# - C#中的流利接口
我对流畅的界面有疑问。
我们有一些对象用作 SQL 接口的参数对象,下面是一个示例:
对于其中一些参数,我想启用一些专门的选项,但不是向 Int32 方法添加更多属性(这只是其中之一),我想我会研究流利的接口。
这是我添加了我正在研究的内容的示例:
我知道这两个选项对于这种类型的参数没有意义,但这不是问题所在。
在上述情况下,Substitute 必须是 SqlParameterOption 类上的静态属性(或方法,如果我只是添加一些括号),而 Precision 必须是实例方法。
如果我重新排序它们会怎样?
那么 Substitute 必须是实例属性,Precision 是静态方法。这当然不会编译,我不能同时拥有同名的静态和非静态属性或方法。
我该怎么做呢?我在这里完全走错了吗?
在重新阅读问题时,我有一个想法,下面这种不同的语法会更有意义吗?
在这种情况下,两者都将是任何 With 返回的实例方法,这将是此类 SqlParameter 选项的专用类或接口。我不确定我是否想转储.With部分,因为这会暴露对象的所有方法,而不仅仅是流利的方法。
建议和一些好的 url 将是最受欢迎的,我已经搜索了很多例子,但他们倾向于展示这样的例子:
(从此页面解除)
编辑:@marxidad回复后的跟进:
使用这种方法,With 必须获取对象,并将其应用于参数。我很好。
如果我使用我添加的语法作为示例,它将是这样的:
在这种情况下,With 不知道链何时结束,因此每个选项都必须直接应用其效果。
什么是首选?选项会构建一个稍后必须应用的效果对象,还是每个效果都直接应用其效果?
我的决定:正如@marxidad所说,如果更改是不可逆转的,并且可能会发生逆转,那么建立状态并在某个时候出现异常失败是我要走的路。
但是,在这种情况下,我将采用一种更简单的方法,直接修改 SqlParameter 对象。
在这种情况下,我的代码将如下所示:
编辑:啊,当我只专注于一件事时,情况就是这样。
我不能使用该语法,我将按照@marxidad的建议使用以下内容:
原因当然是把SqlParameter对象作为参数的方法无法处理With返回的对象,所以虽然SqlParameter对象的构造和设置得当,但还是与预期的用法不兼容。
c# - 在 C# 3 中编写流畅接口的技巧
我正在寻找一些关于 C# 中流畅接口的好技巧。我自己只是在学习,但很想听听我正在阅读的文章之外的其他人的想法。特别是我追求:
- 什么时候流利太多了?
- 有没有流畅的图案?
- C# 中有什么使流畅的接口更流畅(例如扩展方法)
- 复杂的流畅界面仍然是流畅的界面吗?
- 重构以达到流畅的界面或重构现有的流畅界面
- 您使用过或可以推荐的任何好的例子?
如果您可以发布一个提示或想法,或者每个帖子的任何内容。我也想看看他们是如何被投票的。
先感谢您。
c# - EBNF 到流畅的界面
我最近需要为 C# 编写一个流畅的接口,它本质上将镜像 SQL。是的,我知道 LINQ to SQL,但我对“更接近金属”很感兴趣——在C# 中拥有的东西基本上只提供了一个 Intellisensified SQL shim。
例如,
现在,我在想这个概念可以被推广——也就是说,一个通用的 EBNF 到流利的接口生成器怎么样?有谁知道这样的野兽是否存在?
language-agnostic - Fluent 接口 - 方法链
方法链是我知道构建流畅接口的唯一方法。
这是 C# 中的一个示例:
那么其他人如何创建流畅的界面。你如何创造它?需要什么语言/平台/技术?
.net - MSTest 是否有流畅的断言 API?
我最近接触了 nUnit 中的流利界面,我喜欢它;但是,我正在使用 msTest。
有谁知道是否有一个流畅的接口是测试框架不可知的还是用于 msTest 的?
coding-style - 使用 return 语句效果很好!
当我使用返回值创建方法时,我通常会尝试进行设置,以便永远不会出现以必须返回某些默认值的方式调用该方法的情况。当我开始的时候,我经常会编写一些方法来做某事,或者返回他们所做的事情,或者如果他们没有做任何事情,就会返回 null。但我讨厌在我的代码中到处都是丑陋的if(!null)
陈述,
我正在阅读我很多个月前阅读的实用程序员的 ruby 重新指南,我注意到他们经常返回self
(ruby's this
),而他们通常不会返回任何东西。他们说,这是为了能够链接方法调用,就像在这个例子中使用返回他们设置属性的对象的 setter 一样。
起初我觉得这种东西很有吸引力。有几次我很高兴能够链接方法调用,Player.getHand().getSize()
但这有点不同,因为方法调用的对象一步一步地变化。
Stack Overflow 对返回值有什么看法?当您想到返回值时,是否有任何模式或习语会温暖地浮现在脑海中?有什么好方法可以避免挫败感和增加美感?