Принцип наименьшего удивления описывает договор между разработчиком и другой стороной, такой как пользователь, другой разработчик или участник. Принцип основан на двух основных правилах кода:
- Люди — часть системы. Дизайн должен соответствовать опыту, ожиданиям и ментальным моделям пользователя.
- Компонент принципа означает, что компонент системы должен вести себя так, как ожидает большинство пользователей; поведение не должно удивлять или удивлять пользователей.
Приведу несколько надуманных примеров:
- Вызываемая функция add_vlan()не должна настраивать все порты коммутатора для этой VLAN.
- Выполнение команды switchport trunk allowed vlan add 100не должно удалять другие сети VLAN из порта.
- Добавление строки в таблицу базы данных не приводит к удалению таблицы и ее воссозданию.
Приложение в реальном мире
В вашей повседневной жизни есть бесчисленное множество примеров того, как это применимо. Как работают панели навигации, как выйти из программы, как должна выглядеть нажатая ссылка и т. д. Когда процесс не следует принципу, это часто приводит пользователя в замешательство или разочарование.
Даже десятилетия спустя Windows XP, хотя и устарела, по-прежнему хвалится своим дизайном. Это в значительной степени связано с тем, что каждое приложение в системе следовало одним и тем же правилам. Всегда существовала одна верхняя панель навигации, которая подчеркивала букву, обозначающую сочетание клавиш. Позже офис Microsoft представит ленту вместо этой стандартной панели навигации и уберет индикатор подчеркивания. По отдельности вы можете утверждать, что новые системы лучше, но в целом у пользователя нет единого мнения.
Посмотрите этот пример:
Выбранный стиль слева не указывает четко, какой именно выбран, поскольку он основан не на вашем предыдущем опыте, а, скорее, на вашем понимании стиля отдельного сайта.
Приложение для сетевой автоматизации
Хотя стиль рендеринга read the docs, который является реализацией sphinx, не совсем специфичен для сетевой автоматизации, он стал своего рода стандартом де-факто в отрасли. В любом конкретном случае, я подозреваю, что пользовательский интерфейс лучше, но если вы привыкли ко многим инструментам, используемым в сетевой автоматизации, таким как NetBox, NAPALM или библиотекам Ansible и Python, таким как Requests, Flask и netaddr, то тогда у вас будет согласованная структура и компоненты снижают барьер для входа и устанавливают ожидания для пользователей.
Заключение
Часто следование логическим соглашениям об именах в коде приводит к соблюдению этого принципа. Однако стоит отметить, что при построении систем и интеграции необходимо учитывать, как пользователь обычно взаимодействует с системами.