我最近正在观看有关如何创建流畅的 DSL的网络广播,我不得不承认,我不明白为什么要使用这种方法(至少对于给定的示例)。
网络广播展示了一个图像大小调整类,它允许您使用以下语法(使用 C#)指定输入图像、调整大小并将其保存到输出文件:
Sizer sizer = new Sizer();
sizer.FromImage(inputImage)
.ToLocation(outputImage)
.ReduceByPercent(50)
.OutputImageFormat(ImageFormat.Jpeg)
.Save();
我不明白这比采用一些参数的“传统”方法更好:
sizer.ResizeImage(inputImage, outputImage, 0.5, ImageFormat.Jpeg);
从可用性的角度来看,这似乎更容易使用,因为它清楚地告诉您方法期望作为输入的内容。相比之下,使用流畅的界面,没有什么能阻止您省略/忘记参数/方法调用,例如:
sizer.ToLocation(outputImage).Save();
那么关于我的问题:
1 -有什么方法可以提高流畅界面的可用性(即告诉用户他应该做什么)?
2 -这种流畅的接口方法是否只是 C# 中不存在的命名方法参数的替代品?命名参数是否会使流利的接口过时,例如类似的objective-C提供的东西:
sizer.Resize(from:input, to:output, resizeBy:0.5, ..)
3 -流畅的界面是否仅仅因为它们目前很流行而被过度使用?
4 -或者它只是为网络广播选择的一个坏例子?在这种情况下,请告诉我这种方法的优点是什么,在哪里使用它有意义。
顺便说一句:我知道 jquery,并且看到它使事情变得多么容易,所以我不是在寻找关于那个或其他现有示例的评论。
我更多的是寻找一些(一般的)评论来帮助我理解(例如)何时实现一个流畅的接口(而不是一个经典的类库),以及在实现一个时要注意什么。