我最近观看了一场关于如何创建流畅的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,也看到了它使事情变得容易,所以我不需要有关它或其他现有示例的评论。
我更希望得到一些(通用)评论,以帮助我理解例如何实现流畅接口(而不是经典的类库),以及在实现流畅接口时要注意什么。