SlideShare a Scribd company logo
1 of 39
5. Проектирование
Программирование на Java
Федор Лаврентьев
МФТИ, 2016
Компоновка приложения
Проблемы длительной разработки
• Число сущностей растет
• Число связей растет на порядок быстрее
• На каком-то этапе наступает коллапс разработки
Логическая компонента
• Компонента – автономная логическая единица кода
• Компонента предоставляет наружу контракт (см. далее)
• Компоненты взаимодействуют друг с другом
• Компонента – понятие рекуррентное (или фрактальное?..)
Связность (cohesion) и сцепление (coupling)
• Связность – мера силы взаимосвязанности элементов
внутри компоненты; способ и степень связанности между
задачами, выполняемыми компонентой
• Сцепление – мера, способ и степень взаимозависимости между
различными компонентами
Основная идея проектирования
• Меньше сцепление – больше связность
Модульность
• Принцип модульности – код разделяется на отдельные
функционально законченные модули
• Контракт - формальное соглашение о способе использовании
модуля
• API (Application Programming Interface) – интерфейс
взаимодействия с модулем
• SPI (Service Provider Interface) – точки расширения модуля
• Часто интерфейс и реализацию разносят в раздельные модули
Архитектура системы
Этапы каскадной разработки
• Анализ требований
• Проектирование
• Реализация
• Тестирование
• Внедрение
Этап проектирования системы
• Исходные данные – требования от заказчика
• Из требований следуют внешние свойства системы
• Задача проектирования – придумать внутреннее устройство
системы, обеспечивающее заданные внешние свойства
• Алгоритмы решения задач и требуемые структуры данных
• Архитектура системы – логические компоненты и связи между ними
• Механизмы хранения и передачи состояния
Многослойная (layered) архитектура
Система разбивается на несколько слоёв:
• Слой представления (View Layer)
• Управляющий слой (Controller Layer)
• Сервисный слой (Service Layer)
• Слой модели предметной области (Domain Model Layer)
• Слой источников данных (Data Sources Layer)
Слой источников данных
• Делает запросы к базам данных или другим внешним сервисам
• Например, к базе данных с банковскими счетами
• Формирует запросы и разбирает ответы
• Предоставляет интерфейс (API)
• CRUD операции (Create, Read, Update, Delete) над таблицами
• Часто используемые запросы
• Конструктор запросов
• Абстрагирует верхние слои от реалий конкретной базы данных
Слой модели предметной области
• Содержит в себе логику предметной области
• Например, управляет объектами «счёт в банке»
• Отвечает за целостность представления данных
• Например, что нельзя снять со счета больше денег, чем там есть
• Предоставляет интерфейс (API)
• CRUD операции над объектами предметной области
• Типовые модификации (перевод денег между счетами)
• Метаинформация (число открытых счётов)
• Абстрагирует верхние слои от управления состоянием
предметной области
Сервисный слой
• Отвечает за взаимодействие между компонентами предметной
области
• Например, за взаимодействие счетов и покупок
• Управляет выполнением запросов от пользователя
• Предоставляет бизнес-ориентированный интерфейс (API)
• Сделать покупку
• Перевести со счета на счет
• Ввести деньги на счет
• Создать нового пользователя
Управляющий слой (контроллер)
• Отвечает за приемку управляющих команд от пользователя или
других сервисов
• Аргументы командной строки
• REST или SOAP интерфейс
• TCP или Unix socket
• Перенаправляет управляющие команды в сервисный слой
• При необходимости использует данные от слоя модели
• Сообщает пользователю результат выполнения команды
Слой представления
• Взаимодействует с человеком
• Предоставляет человекочитаемый интерфейс
• Web-приложение с HTML-выдачей
• Графическое оконное приложение (WinAPI, QT, ...)
• Утилита командной строки
• Перенаправляет все запросы к контроллеру
• Принимает ответы от контроллера
Пример многослойной архитектуры
• Представление – Web-сервис управления банковским счетом
• http://coolbank.ru/
• Контроллер – HTTP-контроллер
• http://coolbank.ru/register – открыть новый счет
• http://coolbank.ru/account - информация о счете
• http://coolbank.ru/transfer – сделать перевод
• Сервисный слой – класс AccountService
• accountService.newAccount(String name);
• accountService.getAccount(String name);
• accountService.transfer(String source, String dest, double amount);
• Слой модели – класс BalanceManager
• balanceService.getBalance(int accountId);
• balanceService.add(int accountId, double amount);
• Слой источников данных – класс BalanceDAO
• balanceDao.getBalance(int accountId);
• balanceDao.updateBalance(int accountId, double newAmount);
Шаблоны проектирования
Шаблон проектирования
• Многослойная архитектура (Multilayered architecture) – это
пример архитектурного шаблона проектирования
• Шаблон проектирования – повторимая архитектурная
конструкция, решающая конкретную частую проблему
проектирования
• Другие архитектурные шаблоны проектирования:
• MVC (Model-View-Controller)
• Client-Server
• Multitier application
• Broker
• ...
Разновидности шаблонов проектирования
• Порождающие – создание новых объектов
• Структурные – организация интерфейсов между объектами
• Поведенческие – взаимодействие между объектами и деление
ответственности
• Архитектурные, фундаментальные, конкурентные,
корпоративные, ...
Порождающие шаблоны
• Одиночка (Singleton)
• Абстрактная фабрика (Abstract Factory)
• Фабричный метод (Factory Method)
• Строитель (Builder)
• Объектный пул (Object pool)
• Отложенная инициализация (Lazy Initialization)
• ...
Одиночка (Singleton)
https://habrahabr.ru/post/210288/
Абстрактная фабрика (Abstract Factory)
https://habrahabr.ru/post/210288/
Фабричный метод (Factory Method)
https://habrahabr.ru/post/210288/
Строитель (Builder)
https://habrahabr.ru/post/210288/
Объектный пул (Object Pool)
http://wiki3.cosc.canterbury.ac.nz/index.php/Object_pool
Отложенная инициализация (Lazy Init)
http://design-pattern.ru/patterns/lazy-load.html
Структурные шаблоны
• Декоратор (Decorator)
• Обёртка (Wrapper, Adapter)
• Заместитель (Proxy)
• Компоновщик (Composite)
• Фасад (Facade)
• ...
Декоратор (Decorator)
https://habrahabr.ru/post/210288/
Обертка (Wrapper, Adapter)
https://habrahabr.ru/post/210288/
Заместитель (Proxy)
https://habrahabr.ru/post/210288/
Компоновщик (Composite)
https://habrahabr.ru/post/210288/
Фасад (Facade)
https://habrahabr.ru/post/210288/
Поведенческие шаблоны
• Стратегия (Strategy)
• Состояние (State)
• Итератор (Iterator, Cursor)
• Наблюдатель (Observer, Publish/Subscribe)
• Цепочка обязанностей (Chain of Responsibility)
• ...
Стратегия (Strategy)
https://habrahabr.ru/post/210288/
Состояние (State)
https://habrahabr.ru/post/210288/
Итератор (Iterator, Cursor)
https://habrahabr.ru/post/210288/
Наблюдатель (Observer)
https://habrahabr.ru/post/210288/
Цепочка обязанностей (Chain of responsibility)
https://habrahabr.ru/post/210288/

More Related Content

What's hot

Отказоустойчивые решения SQL
Отказоустойчивые решения SQLОтказоустойчивые решения SQL
Отказоустойчивые решения SQLAndrey Korshikov
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernateUnguryan Vitaliy
 
Entity framework
Entity frameworkEntity framework
Entity frameworkScaiper
 
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдераHighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдераИгорь Мызгин
 
базы данных в Delphi
базы данных в Delphiбазы данных в Delphi
базы данных в DelphiAeka227
 
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Yandex
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 

What's hot (17)

Управление данными. Основы проектирования БД
Управление данными. Основы проектирования БДУправление данными. Основы проектирования БД
Управление данными. Основы проектирования БД
 
Управление данными (sql)
Управление данными (sql)Управление данными (sql)
Управление данными (sql)
 
Управление данными (распределенная обработка)
Управление данными (распределенная обработка)Управление данными (распределенная обработка)
Управление данными (распределенная обработка)
 
Управление данными (дополнительно)
Управление данными (дополнительно)Управление данными (дополнительно)
Управление данными (дополнительно)
 
Отказоустойчивые решения SQL
Отказоустойчивые решения SQLОтказоустойчивые решения SQL
Отказоустойчивые решения SQL
 
Управление данными (модели данных)
Управление данными (модели данных)Управление данными (модели данных)
Управление данными (модели данных)
 
Управление данными (литература)
Управление данными (литература)Управление данными (литература)
Управление данными (литература)
 
Управление данными (реляционная модель)
Управление данными (реляционная модель)Управление данными (реляционная модель)
Управление данными (реляционная модель)
 
Управление данными (Введение в СУБД)
Управление данными (Введение в СУБД)Управление данными (Введение в СУБД)
Управление данными (Введение в СУБД)
 
JDBC
JDBCJDBC
JDBC
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernate
 
Entity framework
Entity frameworkEntity framework
Entity framework
 
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдераHighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
 
базы данных в Delphi
базы данных в Delphiбазы данных в Delphi
базы данных в Delphi
 
Lection1
Lection1Lection1
Lection1
 
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 

Viewers also liked

Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev FedorProgramming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev FedorFedor Lavrentyev
 
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorProgramming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorFedor Lavrentyev
 
Programming Java - Lection 03 - Classes - Lavrentyev Fedor
Programming Java - Lection 03 - Classes - Lavrentyev FedorProgramming Java - Lection 03 - Classes - Lavrentyev Fedor
Programming Java - Lection 03 - Classes - Lavrentyev FedorFedor Lavrentyev
 
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorFedor Lavrentyev
 
Programming Java - Lection 04 - Generics and Lambdas - Lavrentyev Fedor
Programming Java - Lection 04 - Generics and Lambdas - Lavrentyev FedorProgramming Java - Lection 04 - Generics and Lambdas - Lavrentyev Fedor
Programming Java - Lection 04 - Generics and Lambdas - Lavrentyev FedorFedor Lavrentyev
 
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev FedorProgramming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev FedorFedor Lavrentyev
 
Procedures funciones
Procedures funcionesProcedures funciones
Procedures funcionesgerardd98
 
La importancia del deporte
La importancia del deporteLa importancia del deporte
La importancia del deporterociotito
 

Viewers also liked (8)

Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev FedorProgramming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
 
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorProgramming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
 
Programming Java - Lection 03 - Classes - Lavrentyev Fedor
Programming Java - Lection 03 - Classes - Lavrentyev FedorProgramming Java - Lection 03 - Classes - Lavrentyev Fedor
Programming Java - Lection 03 - Classes - Lavrentyev Fedor
 
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
 
Programming Java - Lection 04 - Generics and Lambdas - Lavrentyev Fedor
Programming Java - Lection 04 - Generics and Lambdas - Lavrentyev FedorProgramming Java - Lection 04 - Generics and Lambdas - Lavrentyev Fedor
Programming Java - Lection 04 - Generics and Lambdas - Lavrentyev Fedor
 
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev FedorProgramming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
 
Procedures funciones
Procedures funcionesProcedures funciones
Procedures funciones
 
La importancia del deporte
La importancia del deporteLa importancia del deporte
La importancia del deporte
 

Similar to Programming Java - Lection 05 - Software Design - Lavrentyev Fedor

API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...
API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...
API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...Ontico
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéInterSystems CEE
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukInterSystems
 
Платформа Docsvision
Платформа DocsvisionПлатформа Docsvision
Платформа DocsvisionDocsvision
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
 
«Что такое проектирование сайтов и зачем оно нужно» Роман Симачевский, 1Step ...
«Что такое проектирование сайтов и зачем оно нужно» Роман Симачевский, 1Step ...«Что такое проектирование сайтов и зачем оно нужно» Роман Симачевский, 1Step ...
«Что такое проектирование сайтов и зачем оно нужно» Роман Симачевский, 1Step ...web2win
 
Роман Симачевский: Проектируем сайт
Роман Симачевский: Проектируем сайтРоман Симачевский: Проектируем сайт
Роман Симачевский: Проектируем сайтweb2win
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
1С-Битрикс: Корпоративный портал»: от эффективности сотрудника к эффективност...
1С-Битрикс: Корпоративный портал»: от эффективности сотрудника к эффективност...1С-Битрикс: Корпоративный портал»: от эффективности сотрудника к эффективност...
1С-Битрикс: Корпоративный портал»: от эффективности сотрудника к эффективност...CIT TROYA
 
Опыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банкеОпыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банкеCUSTIS
 
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...Ontico
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхMagecom Ukraine
 
Обзор OMNITRACKER CleverENGINE
Обзор OMNITRACKER CleverENGINEОбзор OMNITRACKER CleverENGINE
Обзор OMNITRACKER CleverENGINECleverics
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Василий Савунов
 
Технические особенности Docsvision 5
Технические особенности Docsvision 5Технические особенности Docsvision 5
Технические особенности Docsvision 5Docsvision
 
Andrii Gryshchenko: "An Overview of CQRS and Event Sourcing"
Andrii Gryshchenko: "An Overview of CQRS and Event Sourcing"Andrii Gryshchenko: "An Overview of CQRS and Event Sourcing"
Andrii Gryshchenko: "An Overview of CQRS and Event Sourcing"LogeekNightUkraine
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesDenis Izmaylov
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.Igor Shkulipa
 
2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложенийYandex
 

Similar to Programming Java - Lection 05 - Software Design - Lavrentyev Fedor (20)

API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...
API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...
API плюс толстый клиент – новая парадигма веб-разработки? / Андрей Лебедев (Г...
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для Caché
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard Lebedyuk
 
Платформа Docsvision
Платформа DocsvisionПлатформа Docsvision
Платформа Docsvision
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
«Что такое проектирование сайтов и зачем оно нужно» Роман Симачевский, 1Step ...
«Что такое проектирование сайтов и зачем оно нужно» Роман Симачевский, 1Step ...«Что такое проектирование сайтов и зачем оно нужно» Роман Симачевский, 1Step ...
«Что такое проектирование сайтов и зачем оно нужно» Роман Симачевский, 1Step ...
 
Роман Симачевский: Проектируем сайт
Роман Симачевский: Проектируем сайтРоман Симачевский: Проектируем сайт
Роман Симачевский: Проектируем сайт
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
1С-Битрикс: Корпоративный портал»: от эффективности сотрудника к эффективност...
1С-Битрикс: Корпоративный портал»: от эффективности сотрудника к эффективност...1С-Битрикс: Корпоративный портал»: от эффективности сотрудника к эффективност...
1С-Битрикс: Корпоративный портал»: от эффективности сотрудника к эффективност...
 
Опыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банкеОпыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банке
 
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
 
Обзор OMNITRACKER CleverENGINE
Обзор OMNITRACKER CleverENGINEОбзор OMNITRACKER CleverENGINE
Обзор OMNITRACKER CleverENGINE
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)
 
Битрикс-Framework
Битрикс-FrameworkБитрикс-Framework
Битрикс-Framework
 
Технические особенности Docsvision 5
Технические особенности Docsvision 5Технические особенности Docsvision 5
Технические особенности Docsvision 5
 
Andrii Gryshchenko: "An Overview of CQRS and Event Sourcing"
Andrii Gryshchenko: "An Overview of CQRS and Event Sourcing"Andrii Gryshchenko: "An Overview of CQRS and Event Sourcing"
Andrii Gryshchenko: "An Overview of CQRS and Event Sourcing"
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 
2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений
 

Programming Java - Lection 05 - Software Design - Lavrentyev Fedor

Editor's Notes

  1. Сложность рефакторинга – тяжело осмыслить Сложность изменения API Время вхождения (нового разработчика) Коэффициент автобуса
  2. Рекуррентное – функция – класс – модуль – приложение – система – бизнес-юнит
  3. Модульность улучшает переиспользование, упрощает проектирование, упрощает дистрибуцию Contract-first Development - парадигма разработки “от контракта” Переизбыток зависимостей в системе вызывает непредсказуемые проблемы Разделение реализации и интерфейса сильно сокращает объем знаний и зависимостей, необходимый для использования модуля
  4. Архитектура – совокупность важнейших решений о структуре системы; всё, что тяжело изменить Архитектура может быть у каждой логической компоненты