Перейти к основному содержимому

Проектирование программных систем

Разработчику Архитектору Аналитику

Проектирование программного обеспечения

Правила неизбежности

- каждая система имеет свою архитектуру построения;

- систему нужно разворачивать так, чтобы она выдержала требуемую нагрузку;

- нужно понять, как обновлять систему, и исправлять ошибки;

- рано или поздно придётся интегрировать систему с внешними ресурсами;

- придётся обеспечить безопасность данных и доступа к системе;

- система неизбежно будет расширяться;

- будут ошибки, и нужна будет поддержка.

Что такое проектирование?

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

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

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

В этой главе рассматриваются подходы и принципы проектирования без детализации паттернов реализации или проектирования баз данных. Цель — дать системную основу для понимания последующих тем.


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).