Когда я обнародовал мои идеи в новостях [4], поступило множество очень полезных предложений, но они отличались в приведенной выше классификации, и я представил себе, что список принципов дизайна не менее важен, как и структуры дизайна, но по другой причине: они позволяют вам задавать вопросы относительно вашего предположительного дизайна, выполняя тесты на качество.
- Принцип наименьшего удивления (не удивляйте).
- Делайте общие вещи проще, а редкие вещи возможными
- Последовательность. Одна вещь стала для меня очень понятной, особенно из-зи Python: много случайных правил, которые вы выдаете программисту, которые не имеют ничего общего с решением проблемы, замедляют работу программиста. И при этом наблюдается не линейная, а экспоненциальная зависимость.
- Закон Деметера (Demeter): "Не говорите со странниками". Объект должен ссылаться только на себя, свои атрибуты и аргументы своих методов.
- Вычитание: дизайн закончен, когда вы уже не можете ничего убрать.
- Упрощение перед обобщением[5].(Вариация Оккама Разора (Occam Razor), который говорил: "простые решения - лучше".) Общая проблема, которую мы находим в разрабатываемых структурах, состоит в том, что они предназначены для общих целей, независимо от реальной системы. Это приводит ошеломляющему набору настроек, которые часто не используются, используются неправильно или просто бесполезны. Однако, большинство разработчиков работают над определенной системой, и поиск общности не всегда способствует этому. Лучший путь к общности проходит через понимание правильно установленной специфики примера. Таким образом, этот принцип работает как разделитель между одинаково жизнеспособными альтернативами дизайна. Конечно, всегда возможно, что более простое решение будет более общим.
- Рефлексивность (предложенный мной термин). Одна абстракция на класс, один класс на абстракцию. Также можно назвать Изоморфизм.
- Независимость или Ортогональность. Выражайте независимые идеи независимо. Это полное Разделение, Инкапсуляция и Изменение, и это часть выражения "низкая связанность - большое единение".
- Однажды и только однажды: Предотвращайте дублирование логики и структуры, где дублирование не случайно, то есть где обе части кода преследуют одинаковую цель по одной и той же причине.
В процессе апробирования этой идеи, я надеюсь прийти к небольшой порции фундаментальных идей, которые зафиксируются в вашей голове, пока вы анализируете проблему. Однако, другие идеи, которые появятся при знакомстве с этим списком, могут стать полезны, как проверочные, пока вы просматриваете и анализируете ваш дизайн.
← | Таксономия шаблона | Классификация шаблонов | → |