Зачастую архитектура, которая разрабатывается до этапа конструирования, описывает лишь основной скелет системы, дальнейшее детальное проектирование происходит во время написания кода.
Основная проблема в проектировании заключается в том, что его не получается сделать механически по определённым чётким правилам, каждый раз приходится действовать методом проб и ошибок и постепенно приходить к наиболее простой системе.
Проектирование должно учитывать, какие из свойств системы являются наиболее приоритетными: производительность, время разработки, надёжность и т.д. Также не бывает придела совершенству, поэтому процесс проектирования не имеет конечной точки, оно происходит постепенно, методом проб и ошибок.
Основная проблема в проектировании заключается в том, что его не получается сделать механически по определённым чётким правилам, каждый раз приходится действовать методом проб и ошибок и постепенно приходить к наиболее простой системе.
Проектирование должно учитывать, какие из свойств системы являются наиболее приоритетными: производительность, время разработки, надёжность и т.д. Также не бывает придела совершенству, поэтому процесс проектирования не имеет конечной точки, оно происходит постепенно, методом проб и ошибок.
Главный Технический Императив Разработки ПО: управление сложностью
Сложность бывает двух видов - существенная и несущественная. Существенная сложность возникает из за сложности предметной области, которую мы абстрагируем в нашей программе. Несущественная сложность - необязательная сложность, которую мы вносим самостоятельно во время разработки, она возникает из-за несовершенства проектирования. Основные проявления несущественной сложности: сложное решение простой проблемы, простое, но неверное решение сложной проблемы и неадекватное сложное решение сложной проблемы. Основная задача при проектировании - снижение существенной сложности, которую нам приходится держать в голове в каждый конкретный момент времени(декомпозировать большие сложные проблемы на более мелкие) и сдерживание роста несущественной сложности.
Идеально спроектированный проект обладает следующими свойствами:
- Минимальная сложность
- Простота сопровождения(изменения)
- Слабое сопряжение(loose coupling)
- Расширяемость
- Возможность повторного использования компонентов
- Высокий коэффициент объединения по входу(к одному классу обращается множество других)
- Низкий или средний коэффициент разветвления по выходу(класс обращается к малому количеству других классов)
- Портируемость
- Минимальная, но полная функциональность
- Стратификация(разделение на части, которые могут быть познаны целиком)
- Соответствие стандартным методикам(чтоб другим было легче воспринимать систему)
- Вся система
- Разделение на подсистемы(интерфейс, доступ и хранение данных, бизнес-логика и т.д.)
- Разделение подсистемы на классы
- Выделение данных и методов в классе
- Реализация каждого отдельного метода
Комментариев нет:
Отправить комментарий