From 06a33b99b82765056bf0b109f8fb231261998f0f Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Fri, 27 Sep 2024 20:45:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BC=D0=B5=D0=BD.md=20=D0=B8=20?= =?UTF-8?q?=D0=9C=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/architecture/Домен.md | 32 ++++++++++++++ dev/architecture/Контракт взаимодействия.md | 46 +++++++++++++++++++++ dev/architecture/Модель.md | 26 ++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 dev/architecture/Домен.md create mode 100644 dev/architecture/Контракт взаимодействия.md create mode 100644 dev/architecture/Модель.md diff --git a/dev/architecture/Домен.md b/dev/architecture/Домен.md new file mode 100644 index 00000000..2096f87b --- /dev/null +++ b/dev/architecture/Домен.md @@ -0,0 +1,32 @@ +--- +aliases: + - домена +tags: + - maturity/🌱 +date: 2024-09-27 +zero-link: + - "[[../garden/ru/meta/zero/00 Архитектура ПО|00 Архитектура ПО]]" +parents: +linked: +--- +**Домен** — это предметная область, в которой работает ваша [[../../../../_inbox/Информационная система|система]]. Это набор знаний, правил, процессов и объектов, которые описывают конкретную сферу деятельности. Домены могут быть разными в зависимости от сферы бизнеса, например: финансы, медицина, логистика, образование и т.д. + +Другими словами, домен — это всё, что касается бизнес-логики, которой занимается [[../../../../_inbox/Информационная система|система]]. Разработчики, создающие приложения, должны глубоко понимать предметную область, чтобы адекватно моделировать её в коде. + +> [!EXAMPLE] Пример домена +> Для интернет-магазина домен будет включать такие элементы, как товары, заказы, корзина, покупатели, процесс оплаты и доставки. Все эти сущности и их взаимодействия составляют домен электронной коммерции. +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]] +**Родитель**:: +**Источник**:: +**Создана**:: [[2024-09-27]] +**Автор**:: +### Дополнительные материалы +- + +### Дочерние заметки + + +- [[Модель]] + diff --git a/dev/architecture/Контракт взаимодействия.md b/dev/architecture/Контракт взаимодействия.md new file mode 100644 index 00000000..21c37b6e --- /dev/null +++ b/dev/architecture/Контракт взаимодействия.md @@ -0,0 +1,46 @@ +--- +aliases: +tags: + - maturity/🌱 +date: 2024-09-27 +zero-link: + - "[[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]" + - "[[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]" +parents: +linked: +--- +В контексте разработки программного обеспечения **контракт** — это соглашение или набор правил, определяющий, как различные части системы (например, компоненты, классы или модули) взаимодействуют друг с другом. Контракт описывает обязанности и ожидания каждой из сторон (поставщика и потребителя), гарантируя, что при соблюдении этих условий взаимодействие будет корректным и предсказуемым. + +Основные элементы контракта: +- **Предусловия**: Условия, которые должны быть выполнены перед вызовом метода или началом взаимодействия. Например, входные данные метода должны быть корректными, а ресурс должен быть доступен. +- **Постусловия**: Результаты, которые гарантируются после выполнения метода или операции, если предусловия были выполнены. Это может включать возвращаемое значение метода или состояние объекта после вызова. +- **Инварианты**: Условия, которые остаются неизменными в течение жизни объекта. Например, допустимые диапазоны значений переменных или непротиворечивость состояния системы. +## Примеры контрактов +**Контракт в объектно-ориентированном программировании**: В [[ООП|ООП]] контракт может выражаться через интерфейсы или абстрактные классы, которые определяют набор методов, обязательных для реализации. Это позволяет программным компонентам общаться на основе общих соглашений, не зная конкретную реализацию. + +Пример интерфейса как контракта: + ```java + public interface Shape { + double calculateArea(); // контракт: любой класс, реализующий Shape, обязан иметь этот метод + } + ``` + +**Контракт API**: В контексте API контрактом является описание того, как клиент может взаимодействовать с API. Это включает в себя форматы запросов и ответов, методы HTTP, параметры, типы данных, кодировки и обработку ошибок. + +Пример контракта REST API: +- Метод: `POST /users` +- Входные данные: JSON-объект с полями `name` и `email` +- Ответ: код 201 (Created) и объект пользователя +- Ошибки: код 400 (Bad Request) при некорректных данных +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]], [[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]] +**Родитель**:: +**Источник**:: +**Создана**:: [[2024-09-27]] +**Автор**:: +### Дополнительные материалы +- + +### Дочерние заметки + diff --git a/dev/architecture/Модель.md b/dev/architecture/Модель.md new file mode 100644 index 00000000..414775fd --- /dev/null +++ b/dev/architecture/Модель.md @@ -0,0 +1,26 @@ +--- +aliases: +tags: + - maturity/🌱 +date: 2024-09-27 +zero-link: + - "[[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]" +parents: + - "[[Домен|Домен]]" +linked: +--- +**Модель** — это представление [[Домен|домена]] в коде. Она описывает, как сущности и объекты [[Домен|домена]] связаны между собой и взаимодействуют в системе. Модель может включать классы, структуры данных, правила валидации, бизнес-логику и отношения между объектами. + +Хорошо спроектированная модель точно описывает доменные объекты и их поведение. Основная задача модели — предоставлять разработчику инструменты для работы с объектами [[Домен|домена]], обеспечивая соответствие бизнес-правилам и логике. +*** +## Мета информация +**Область**:: +**Родитель**:: +**Источник**:: +**Создана**:: [[2024-09-27]] +**Автор**:: +### Дополнительные материалы +- + +### Дочерние заметки +