如今,流利的API非常普遍。最近,我在几乎所有与我合作的系统中都能找到它们。大多数情况下,它们增强了可读性,但有时它们将我锁定在不灵活的规范中,使得理解它们构建的规范的运行时行为几乎是不可能的。关于如何创建一个良好的流畅API有共识吗?使用流畅的API表示结构或规范的最佳方法是什么?
我最近注意到NServiceBus配置类中的流畅API的这个新变种:
class EndpointConfig : IConfigureThisEndpoint, AsA_Server { }
它使用多个接口作为一种线性流畅的接口。我喜欢它,因为当我只是试图表示简单的要求时,它不会给我带来额外的代码和上下文的沉重负担。在简单的情况下,这是足够的。但我认为它不会扩展到复杂的规格。您如何看待这种接口的使用?
你在C#中使用了哪些其他新习语?你在哪里使用它们?他们的优势是什么?你不会在哪里使用它们?另外,你如何衡量你正在考虑使用的成语的优势?
答案 0 :(得分:1)
我过去常常在表示不同行为的方法上避开布尔参数,例如:我会采取
int ExpensiveComputation(bool useDiskCache)
并希望将其变为
int ExpensiveComputation(CacheType.DiskCache)
我最喜欢这个,因为当你打电话给ExpensiveComputation(true)
时,不清楚true
的含义并不清楚所有关于ExpensiveComputation
的内容,而ExpensiveComputation(CacheType.DiskCache)
给你一个好处想法。
然而,对于命名参数,我发现使用第一个参数通常是可以接受的,并且这样称呼它:ExpensiveComputation(useDiskCache: true)
所以这是我为自己发明的最近的成语。