«Способность к дозволению» (иначе?) - PullRequest
1 голос
/ 02 февраля 2011

Как дизайнер, мне нравится предоставлять интерфейсы, которые обеспечивают баланс мощности и простоты. Например, я думаю, что разработчики LINQ следовали этому принципу, потому что они предлагали как точечную нотацию, так и нотацию запроса. Первый более мощный, но второй легче читать и следовать. Если вы не согласны с моей оценкой LINQ, пожалуйста, все равно попытайтесь понять мою точку зрения; LINQ был просто примером, мой пост не о LINQ.

Я называю этот принцип "наборной мощностью". Но я хотел бы знать, как это называют другие люди. Конечно, некоторые скажут, что «ПОЦЕЛУЙ» является общим термином. Но я вижу KISS как надмножество или практику "потребления". Снова используя LINQ в качестве моего примера, на мой взгляд, команда программистов, которые всегда пытаются использовать нотацию запросов над точечной нотацией, практикуют KISS. Таким образом, разработчики LINQ практиковали «коммутируемую мощность», тогда как потребители LINQ практикуют KISS. Они вместе создают прекрасную музыку.

edit Я приведу другой пример. Представьте себе средство ведения журналов, которое имеет две подписи, допускающие два использования:

void Write(string message);
void Write(Func<string> messageCallback);

Целью двух подписей является удовлетворение следующих потребностей:

//Every-day "simple" usage, nothing special.
myLogger.Write("Something Happened" + error.ToString() );

//This is performance critical, do not call ToString() if logging is
//disabled.
myLogger.Write( () => { "Something Happened" + error.ToString() });

Наличие этих перегрузок представляет собой «коммутируемую мощность», потому что у потребителя есть выбор простого интерфейса или мощного интерфейса. Любящий KISS потребитель будет использовать более простую подпись большую часть времени и позволит "занятой" выглядящей подписи, когда потребуется питание. Это также помогает самодокументированию, потому что использование мощной подписи говорит читателю, что код критичен к производительности. Если бы у регистратора была только мощная подпись, то не было бы «коммутируемой мощности».

Так что это полный круг. Я рад сохранить свою собственную чеканку «с возможностью набора», если ее еще нет, но я не могу удержаться от мысли, что мне не хватает очевидного обозначения этой практики.

p.s. Другим примером, относящимся к , но не совпадающим с «способностью набора», является принцип Скотта Мейера «сделать интерфейсы простыми в использовании и трудными в использовании неправильно».

Ответы [ 3 ]

1 голос
/ 02 февраля 2011

Если ваш «циферблат» имеет только две позиции / уровня, звучит так, будто вы просто имеете в виду фасад .

1 голос
/ 15 марта 2011

«Прогрессивное раскрытие».

Возможно, вы уже знакомы с этим термином из-за его использования с пользовательскими интерфейсами - например, кнопками «Дополнительно».Однако концепция носит более общий характер.

Из "Универсальных принципов проектирования" Лидвелла, Холдена и Батлера:

   Progressive disclosure involves separating information into 
   multiple layers and only presenting layers that are necessary or relevant. 
0 голосов
/ 02 февраля 2011

Я называю этот принцип "наборной мощностью".Но я хотел бы знать, как это называют другие люди.

Я лично никогда не слышал о «набираемой мощности», и я не думаю, что это стандартное для отрасли понятие.

В случае LINQ мы бы назвали его дизайн плавным интерфейсом .

Свободные интерфейсы разработаны таким образом, что все методы наОбъект возвращает тот же тип, что и этот объект, и, следовательно, упрощает создание цепочек методов.Вы видите тот же плавный дизайн в StringBuilder.Append перегрузки, беглый NHibernate и RhinoMocks .

В случае JQuery этотакже использует свободные интерфейсы для цепочки методов, но я считаю, что "query" или "DSL" - правильное имя для его записи селектора .

( Селекторы Obj-C используйте ту же терминологию, но опишите нечто совершенно иное.)

Поскольку он описывается как запрашивающий DSL, большинство людей могут сделать вывод, что он принимает последовательность в качестве входных данных и возвращает последовательность в качестве выходных данных.Нотация запроса выполняет примерно ту же функцию, что и XPath, с большим количеством наворотов.

Hibernate HQL - это запрашивающий DSL поверх многих диалектов SQL, а в очень поверхностном смысле регулярные выражениязапрос DSL, который преобразует строковые последовательности в новый набор строковых последовательностей (в принципе, вы можете создать плавный интерфейс для регулярных выражений , но это, вероятно, заставит вас потерять голову).

...