c# - C# 中的新样式

标签 c# idioms fluent-interface

如今,Fluent API 非常普遍。最近,我几乎在我使用的每个系统中都发现了它们。大多数情况下,它们增强了可读性,但有时它们将我束缚在不灵活的规范中,让我几乎无法理解他们构建的规范的运行时行为。关于如何创建良好的流畅 API 是否达成共识?使用流畅的 API 表示结构或规范的最佳方式是什么?

我最近在 NServiceBus 中注意到 Fluent API 的这个新变体配置类:

class EndpointConfig : IConfigureThisEndpoint, AsA_Server { }

它使用多个接口(interface)作为一种线性流畅的接口(interface)。我喜欢它,因为当我只想表示简单的需求时,它不会给我带来额外代码和上下文的沉重负担。在简单的情况下就足够了。不过,我不认为它会扩展到复杂的规范。您如何看待接口(interface)的这种用途?

您在 C# 中使用了哪些其他新习语?你在哪里使用它们?他们的长处是什么?你不会在哪里使用它们?另外,您如何衡量您正在考虑使用的成语的强度?

最佳答案

我过去常常避免在指示不同行为的方法上使用 bool 参数,例如我愿意接受

int ExpensiveComputation(bool useDiskCache)

更喜欢把它变成

int ExpensiveComputation(CacheType.DiskCache)

我最喜欢这个,因为当你调用 ExpensiveComputation(true) 时,在不了解 ExpensiveComputation 的情况下不清楚 true 的含义>,而 ExpensiveComputation(CacheType.DiskCache) 给了你一个好主意。

但是,对于命名参数,我发现使用第一个参数通常是可以接受的,并这样调用它:ExpensiveComputation(useDiskCache: true) 所以这是我最近为自己发明的一个习惯用法。

关于c# - C# 中的新样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3382088/

相关文章:

c# - 如何在方法内部更改变量并在外部更改它

php - 返回后使用 break

list - 在 Groovy 中以惯用方式获取列表的第一个元素

visual-studio - 如何调试流畅的 API?

C# 为方法调用构建 Fluent API

c# - 无法删除字符串中的一组字符

c# - Thread.Sleep() 的可接受使用

c# - 从 C# winform 中的 SQL 存储过程返回结果和消息

针对同一列表使用不同过滤器处理多个 for 循环的 Pythonic 方法?

entity-framework - 通过 Entity Framework 6.0、Fluent API 和 DataAnnotations 重用所需属性的列