C#中的新样式

时间:2010-08-01 12:54:04

标签: c# idioms fluent-interface

如今,流利的API非常普遍。最近,我在几乎所有与我合作的系统中都能找到它们。大多数情况下,它们增强了可读性,但有时它们将我锁定在不灵活的规范中,使得理解它们构建的规范的运行时行为几乎是不可能的。关于如何创建一个良好的流畅API有共识吗?使用流畅的API表示结构或规范的最佳方法是什么?

我最近注意到NServiceBus配置类中的流畅API的这个新变种:

class EndpointConfig : IConfigureThisEndpoint, AsA_Server { }

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

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

1 个答案:

答案 0 :(得分:1)

我过去常常在表示不同行为的方法上避开布尔参数,例如:我会采取

int ExpensiveComputation(bool useDiskCache)

并希望将其变为

int ExpensiveComputation(CacheType.DiskCache)

我最喜欢这个,因为当你打电话给ExpensiveComputation(true)时,不清楚true的含义并不清楚所有关于ExpensiveComputation的内容,而ExpensiveComputation(CacheType.DiskCache)给你一个好处想法。

然而,对于命名参数,我发现使用第一个参数通常是可以接受的,并且这样称呼它:ExpensiveComputation(useDiskCache: true)所以这是我为自己发明的最近的成语。