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