понедельник, 21 декабря 2015 г.

Глава 5. Проектирование при конструировании(часть 1)

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

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


Главный Технический Императив Разработки ПО: управление сложностью

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


Комментариев нет:

Отправить комментарий