Напишите программы, которые делают одно и делают это хорошо - PullRequest
9 голосов
/ 30 марта 2011

Я могу понять часть «делай одно» через инкапсуляцию, Внедрение зависимостей , Принцип наименьшего знания и Тебе это не нужно ; но как понять вторую часть "делай хорошо?"

В качестве примера приводится понятие полнота , приведенная в той же статье YAGNI :

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

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

Итак, что является лакмусовой бумажкой для того, чтобы увидеть, что особенность относится к категории «делай хорошо» (следовательно, включи ее в функцию / класс / программу) или к другой категории «делай одно» (следовательно, исключить это)?

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

Что является хорошим примером, когда удаление какой-либо дополнительной функции сделало бы ее не "делать это хорошо?"

Ответы [ 5 ]

1 голос
/ 04 апреля 2011

В «Do It Well» я вижу не только качество реализации функции, но и полноту набора функций (в вашем примере это переименование, а также создание и удаление).

Do It Well проявляется во многих отношениях некоторыми способами мышления:

Поведение в ответ на «особые» входы .Пример, вычисление среднего значения некоторых целых чисел:

int mean(int[] values) { ... }

что это делает, если в массиве нет элементов?Если количество товаров превышает MAX_INT?

Характеристики производительности .Было ли уделено достаточное внимание поведению при увеличении объемов данных?

Сбой зависимости .Если наша реализация зависит от других модулей или инфраструктуры, что произойдет, когда они выйдут из строя.Пример: Файловая система заполнена, база данных выключена?

Что касается самой функции, то я думаю, что вы правы, чтобы определить здесь напряжение.Одна вещь, которую вы могли бы рассмотреть: вам не нужно реализовывать каждую функцию, при условии, что совершенно очевидно, что функция может быть легко добавлена ​​без полного переписывания.

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

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

Думайте об этом как о саде: если вы сажаете одну вещь и сажаете ее хорошо, скажем, хризантему, вам не достаточно просто посадить семена. На самом деле вам нужно убедиться, что почва хорошо ухожена, что территория достаточно защищена, что сезон подходит и т. Д.

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

Как и те функции, которые YAGN , требуется немного бдительности, чтобы определить, какие сорняки представляют собой ползучесть, а какие представляют жизненно важные и дополнительные функции.

Независимо от того, что сделал это хорошо означает просто, что ваша хризантема сытна, здорова и своевременно. : -)

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

Цель этого совета - заставить вас отдавать предпочтение качеству, а не количеству.

Понятие одна вещь субъективно и зависит от гранулярности. Вы бы сказали, что приложение для работы с электронными таблицами делает больше, чем одно, если оно также может печатать, или это часть этой одной вещи?

Суть в том, что вы должны убедиться, что любая функция и само приложение выполнено и будет радовать клиентов перед тем, как вы добавите новые функции.

0 голосов
/ 30 марта 2011

Это может показаться странным примером, но я бы сказал, что Dropbox - хороший, хотя и сложный пример.

Ему удалось отбить множество похожих конкурирующих приложений, благодаря преданности упрощению иНедостаток возможностей, как вы уже сказали, нарушил бы принцип «делай одно».Приложение AP позволяет вам хранить документы в папке, к которой вы можете получить доступ где угодно, и это почти предел.Они углубились в основную проблему и решили ее так, чтобы она отлично работала в более чем 90% случаев.

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

Я бы предположил, что 90 +% использования ls без аргументов или, может быть, два или трииз самых популярных.Принцип «делай это хорошо» должен ориентироваться на то, что нужно большинству пользователей, вместо того, чтобы обслуживать опытных пользователей или дополнительные случаи, как это делает ls со своим множеством опций.

Это то, что Dropbox делает успешно и почемуэто довольно хорошо согласовано в качестве примера хорошего дизайна приложения.

0 голосов
/ 30 марта 2011

Я бы сказал, что программа электронной почты без возможности добавления вложений была бы хорошим примером.

...