Последнее изменение: 1 сентября 2007г.

"0,1,много..." или "чисел не существует"

Я пришел к этому выводу на том основании, что число два
бессмысленно и существовать не может.

Айзек Азимов. "Сами Боги"


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

Итак. Представим себе приложение, имеющее одну рабочую область. Скажем, панель, на которой можно визуально раскладывать узлы графа. Для этой работы есть целая панель инструментов, достаточно большая. Представили? Замечательно! Приложение развивается, и вот нам понадобилась вторая такая же панель, на которую, скажем, можно скопировать фрагмент основного графа. Вопрос. Что делать с панелью инструментов?

Вопрос не праздный. Панель достаточно большая, потому копирование ее во-первых, съест часть рабочей области, во-вторых, просто некрасиво. Двадцать сдублированных кнопок – это никуда не годится. Ну пусть даже десять – все равно это не дело. Естественное решение – сделать так, чтобы кнопки действовали на ту панель, которая активна. Т.е., необходимо ввести механизм переключения между панелями. Казалось бы, ничего сложного. Но вот здесь основные грабли и положены.

Дело все в том, что чаще всего принимается решение о реализации данного механизма с учетом того, что панелей всего две. Это решение является следствием недостаточного опыта. Ибо практика показывает, что где два, там и... три, четыре, и т.д. И тогда придется все переделывать еще раз.

Я не случайно привел в начале цитату из Азимова. Мне кажется, что счет в проектировании ПО должен быть таким: 0, 1, много. В этом я убеждался неоднократно, реализуя общий механизм вместо частного, для двух элементов. Да, это занимает больше времени. Да, порой это вызывает недовольство начальства. Да, это может и не пригодиться. Однако плюсы, которые я получал в случаях, когда надо было что-то поменять, перевешивали все дополнительные затраты. В частности, когда потребовалось ввести в приложение третье окно для работы с таким же графом – это заняло что-то около часа.

В общем, для себя я сформулировал следующее правило:

В проектировании приложения есть числа 1 и 0. Что означает, что компонент приложения либо есть, либо его нет. В случае возможного присутствия хотя бы двух одинаковых компонентов, стоит считать, что их может быть неопределенное число N и, соответственно, основывать бизнес-логику именно на этом предположении.

Это правило меня не раз спасало. Надеюсь, что кому-нибудь оно тоже сбережет много сил и нервов.