TGViewer
Системный Аналитик Системный Аналитик @sys_sa · 19.1K subscribers
Post #374 12.7K
GRASP: краткий обзор

Проектирование ПО
начинается с определения архитектуры высокого уровня (HLA - High Level Architecture). В HLA надо определить объекты или процессы, для чего создаём приложение. Существуют подходы:

1⃣Функциональный (структурный)
2⃣Объектно‑ориентированный
〰 Включает принципы GRASP
〰 Может быть реализован с помощью DDD

🔵В функциональном подходе выделют компоненты системы, их функции и способы взаимодействия, без привязки к объектам
➡️ Выделяем модули для управления товарами (добавление, удаление), обработки заказов (создание, обработка оплаты). Модуль управления товарами может вызывать функции модуля обработки для оформления заказа

🔵ОО основан на моделировании системы в виде взаимосвязанных объектов, у которых есть свойства и поведение, а также учитывает принципы объектно-ориентированного программирования
Класс — шаблон, который определяет структуру и поведение объектов. Содержит атрибуты (данные) и методы (функции)
Объект — конкретный экземпляр класса, содержащий значения атрибутов и способный выполнять определённые методы
➡️ Рассматриваем систему как набор объектов (Задача, Пользователь), каждый из которых имеет свои свойства и методы, и взаимодействует через них


✳️ GRASP

GRASP (General Responsibility Assignment Software Patterns) — набор рекомендаций и принципов проектирования ПО для определения архитектуры и отношений между объектами

— сфокусирован не на решении прикладных задач, а на распределении какому объекту назначить то или иное поведение
— GRASP может рассматриваться в рамках объектно-ориентированного проектирования, помогает в реализации его принципов
— применяется в веб-разработке и мобильной разработке, автоматизации процессов и т. д.
— может использоваться в сочетании с различными типами паттернов проектирования
Например, чтобы определить, какие объекты будут создавать методы / определить роли классов в компонентах

✳️ Зачем GRASP аналитику?

⚪помогает разрабатывать четкие, понятные структуры системы
⚪определять обязанности каждого объекта и устанавливать связи между ними

✳️ Паттерны GRASP

Используются для:
🔵создания объектов
🔵определения ответственностей классов
🔵управления связями между объектами и др

Сначала определяют бизнес-правила и требования к системе➡️ После выбираются подходящие паттерны для реализации этих требований

Каждый паттерн решает конкретную проблему проектирования и имеет свои рекомендации по применению

Популярные принципы GRASP:

1⃣Controller (Контроллер): координирует работу между объектами и обрабатывает внешние запросы. Объект, который принимает пользовательский ввод, делегирует его другим объектам для выполнения операций
➡️ контроллер веб-приложения обрабатывает запросы от клиентов и вызывает методы для выполнения бизнес-логики

2⃣Creator (Создатель): отвечает за создание экземпляров других классов
➡️ если есть класс Order, который создает экземпляры Item, то метод создания объекта Item должен быть внутри класса Order

3⃣Expert (Эксперт): объект, больше всех знает, как выполнить определенную операцию, должен быть ответственным за её выполнение
➡️ класс управления заказами может быть экспертом по созданию и обработке заказов

4⃣High Cohesion (Высокая связность): класс выполняет только одну задачу / ответственность. Каждый класс должен быть организован вокруг единой цели
➡️ класс EmailSender должен заниматься только отправкой электронных писем, а класс PaymentProcessor - только обработкой платежей

5⃣Low Coupling (Низкая связность): классы должны быть слабо связаны друг с другом. Изменения в одном классе не должны приводить к изменениям в другом классе
➡️ если меняется способ оплаты в классе PaymentProcessor, класс Order и Customer не должны быть затронуты

6⃣ Pure Fabrication (Чистая фабрикация): для создания объектов, которые не имеют аналога в предметной области, но служат для снижения связанности и увеличения гибкости системы
➡️ класс Logger для записи логов, не является объектом из реального мира, но играет важную роль в системе для логирования

⭐️ Подборка материалов доступна в базе знаний по системному анализу

#проектирование
  • 👍 20
  • ❤ 5
  • 🔥 2
  • 🤔 2
More from @sys_sa
  1. Sep 28, 2026🔼AMQP, MQTT и STOMP: протоколы обмена сообщениями AMQP, MQTT и STOMP — независимые проток…
  2. Sep 26, 2026Как облегчить работу ИТ-аналитика уже сейчас — без долгосрочных перестроек процессов? Обсу…
  3. Aug 28, 2026❓ ICAM (Incident Cause Analysis Method) ICAM (Incident Cause Analysis Method) — метод разб…
  4. Aug 19, 2026🖥 NewSQL NewSQL — класс реляционных СУБД, который совмещает привычный SQL и строгие ACID…
  5. Jul 14, 2026🔼 Server Driven UI (SDUI) Server Driven UI (SDUI) — архитектурный подход, при котором сер…
  6. Jul 7, 2026📊 Сравнение Баз данных и Хранилищ данных ▫️База данных – оперативное хранилище, где содер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →