问题标签 [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 投票
5 回答
2319 浏览

c++ - C++ 中的流利接口和继承

我想构建一个type::base具有一些通用功能和流畅接口的基础(抽象)类(我们称之为),我面临的问题是所有这些方法的返回类型

现在我可以制作子类型,例如:

使用这样的子类型时会出现问题:

这不会编译,因为我们返回的是 base 而不是 my_type。

我知道我可以:

但是我在想如何实现它,但我没有找到任何有效的想法,一些建议?

0 投票
1 回答
371 浏览

class-design - 在一个类中混合流式和非流式接口

我认为流畅的界面对于许多任务来说非常方便。但是当我最终将流利的方法和修改方法混合在一个类中时,我感到不安。

只是一个例子(有点做作,请多多包涵):

假设一个字符串实用程序类,修剪似乎有利于链接:

其他方法自然会返回一个新对象:

还有第三种类型,它本身会在逻辑上改变对象返回一个新对象:

当我单独使用每个方法最明显的签名时,我最终得到了这三种类型,我担心使用哪个类不是很直观,特别是因为返回类型是 mroe 或更少相同。


我已经决定Str不做不可变的——因为像SplitToken提供核心功能这样的方法。我的主要问题是混合流利的方法你会怎么做?

  • 不要在该接口中使用流利的方法

  • 将它们移动到子界面(见下文)

  • “如果一个人流利,所有修改方法都应该流利”?

  • 对流利的方法使用 seocific 前缀?

  • 不用担心?

  • ???

子界面思路:

我对此犹豫不决,我真的不喜欢额外的“流利”——尤其是它是 C++ 中的方法调用

你怎么看?

[编辑] 我在这里使用“流利”的基本含义是在单个实例上链接方法调用,而不是在代码中创建英语句子的高级意义。

0 投票
18 回答
80398 浏览

oop - 方法链接 - 为什么这是一个好习惯,或者不是?

方法链接是对象方法返回对象本身以便为另一个方法调用结果的做法。像这样:

这似乎被认为是一种很好的做法,因为它产生了可读的代码或“流畅的界面”。然而,对我来说,它似乎打破了面向对象本身隐含的对象调用符号 - 生成的代码并不代表对先前方法的结果执行操作,这就是面向对象代码通常预期的工作方式:

这种差异设法为“调用结果对象”的点表示法创建了两种不同的含义:在链接的上下文中,上面的示例将读取为保存参与者对象,即使该示例实际上是为了保存计划getSchedule 接收到的对象。

我知道这里的区别在于被调用的方法是否应该返回某些东西(在这种情况下,它会返回被调用的对象本身以进行链接)。但这两种情况与符号本身没有区别,仅与被调用方法的语义不同。当不使用方法链接时,我总是可以知道方法调用对与前一次调用的结果相关的东西进行操作- 使用链接,这个假设会被打破,我必须在语义上处理整个链以了解实际对象是什么所谓真的是。例如:

最后两个方法调用引用 getSocialStream 的结果,而前面的调用引用参与者。也许在上下文发生变化的地方实际编写链是不好的做法(是吗?),但即使那样,您也必须不断检查看起来相似的点链是否实际上保持在相同的上下文中,或者只处理结果.

在我看来,虽然方法链接在表面上确实产生了可读的代码,但重载点符号的含义只会导致更多的混乱。因为我不认为自己是编程大师,所以我认为是我的错。所以:我错过了什么?我是否理解方法链接有些错误?在某些情况下方法链接特别好,或者有些情况特别糟糕?

旁注:我理解这个问题可以被解读为一种被掩盖为问题的观点陈述。然而,事实并非如此——我真的很想理解为什么链接被认为是好的实践,以及我认为它破坏了固有的面向对象表示法的错误在哪里。

0 投票
1 回答
177 浏览

.net - Fluent Interfaces - 正在创建的对象的数量

我正在为我正在玩的一些简单的验证内容创建一些流畅的界面。我注意到的一件事是我创建了很多不同的对象。

例如给出以下陈述:

对于每个“。” (接受最后一个)我正在更新一个对象。如果我在这里没有使用流畅的界面,我只会使用静态方法。

我想知道的是,如果有人知道在使用这个数量的实例对象(注意它们是非常小的对象)作为使用静态方法时会注意到性能上的任何真正差异。

干杯安东尼

0 投票
5 回答
231 浏览

c# - 哪个更流畅 - 更长或更短的语法?

我正在尝试创建我的第一个流畅的界面,我只是想知道其他人认为哪个更流畅,他们更喜欢使用哪个?

干杯安东尼

0 投票
1 回答
3062 浏览

c# - 具有流畅界面的 Castle 拦截器

我试图让我编写的拦截器工作,但由于某种原因,当我请求我的组件时,它似乎没有实例化拦截器。我正在做这样的事情(如果这不能完全编译,请原谅我,但你应该明白):

我已经在拦截器的构造函数中放置了断点,它似乎根本没有实例化它。

过去我使用 XML 配置注册了我的拦截器,但我热衷于使用流畅的界面。

任何帮助将不胜感激!

0 投票
1 回答
3164 浏览

c# - 在流畅的界面中实现条件

我一直在尝试为我的系统中的一组规则实现一个流畅的接口。我想要完成的是这个

但是,我在实现我打算如何的条件时遇到了麻烦。目前,我需要像在这个片段中那样调用 When() 两次:

我的 TicketRules 类看起来是这样的:

ITicketRules

我还需要在 When 子句中支持 AddTicketParameters 的子类(尽管我可能对那部分使用了泛型)。我在这里发帖是因为我对我的设计感到困惑,而 Martin Fowler 的文章更让我困惑。

0 投票
5 回答
754 浏览

wpf - 如何创建一个流畅的界面来定义对话框?

我正在寻找使用流畅界面定义简单对话框(和其他 UI 元素)的示例经验。

(我可能需要在内部编程语言中添加对自定义对话框的支持,我认为流畅的界面可能是最好的方法)

如果这会影响您的答案,那么 UI 系统将建立在 Winforms 或 WPF 之上。


如果界面不流畅,我将问题更改为“一个简单易用(和阅读)的 API..”,它不依赖于“拖放”UI 设计器的使用。

我认为结果会在某种程度上流利,例如

文本框(“名称”)。标签(“人名”)。专栏(1)

文本框(“注释”)。标记(“注释”)。多行(4)。列(1).ToColumn(3)

但是接口不必是单行


这个“如何使数据绑定类型安全并支持重构”为数据绑定的流畅接口提供了一个很好的起点。

0 投票
2 回答
271 浏览

nhibernate - NHibernate:删除集合并重新插入

我有一个具有相关权限的用户。这是我想要的:

我创建一个用户并向 User.Permissions 集合添加权限。它被保存,一切都按预期发生。

然后我编辑用户并删除权限。然后创建一个新的用户对象,并且权限集合为空。这个新用户对象的标识符和版本被设置为相关值并且用户对象被更新。

但不会删除现有权限。

所以我希望 NHibernate 始终删除权限集合并重新插入其中的所有项目。

我该如何设置?我正在使用流利的api。

问候, 埃本

0 投票
3 回答
2321 浏览

c# - 如何对使用 Fluent 接口的代码进行单元测试?

我通过方法链创建了一些小的流畅接口。他们通常调用一些从 web 服务/数据库中获取数据的存储库。

我应该如何进行使用流畅接口的单元测试方法?

我可以对 fluent interface 的各个组件进行单元测试,但是如果我想对上面的 FindComputers 方法进行单元测试,我应该怎么做?

  1. 使用fluent接口的具体实现,在Repository类上写期望
  2. 模拟流畅的界面本身并对其设定期望
  3. 仅测试 fluent 接口本身,而不是 FindComputers() 方法

我想找到一种易于维护的方法。