Недавно я смотрел трансляцию о о том, как создать плавный DSL, и я должен признать, что я не понимаю причин, по которым один будет использовать такой подход (по крайней мере, для данного примера).
В веб-трансляции представлен класс изменения размера изображения, который позволяет вам указать входное изображение, изменить его размер и сохранить его в выходной файл, используя следующий синтаксис (используя С#):
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 - Является ли этот свободный интерфейс просто заменой неименованных параметров метода в С#? Именованные параметры упрощают доступность интерфейсов, например. что-то подобное objective-C предлагает:
sizer.Resize(from:input, to:output, resizeBy:0.5, ..)
3 - Являются ли текущие интерфейсы чрезмерными, просто потому, что они в настоящее время популярны?
4 - Или это был просто плохой пример, который был выбран для трансляции? В этом случае скажите мне, каковы преимущества такого подхода, где имеет смысл использовать его.
BTW: Я знаю о jquery и вижу, как легко это делает, поэтому я не ищу комментарии об этом или других существующих примерах.
Я больше ищу некоторые (общие) комментарии, чтобы помочь мне понять (например), когда нужно внедрить свободный интерфейс (вместо классической библиотеки классов) и что следует учитывать при реализации.