SlideShare a Scribd company logo
Введение 
Изображение архитектуры
Гибкие команды требуют 
качественной коммуникации 
● Визуальная информация >80% 
● TDD, ... не дает возможности быстро 
оглядеть всю картину 
● … и код тоже 
● Не детальное моделирование мелочей, а 
скетчи решения
Польза от скетчей 
● Вся команда и новые участники легко 
понимают общую картину 
● Легко поделиться с командой, что ты 
собираешься делать 
● “Навигационная карта” по коду 
● Пространство для анализа рисков 
● Пространство для совместной работы
Неэффективные скетчи
Список технологий
Квадраты без линий
Список фич
Адское месиво
В целом всё так
Логический взгляд
Эффективные скетчи 
Подход C4: 
● context 
● containers 
● components 
● classes
Внимание 
● Принятым обозначениям и нотации 
● Не стоит мешать разные уровни 
абстракции между собой 
● Простота 
● Основанность на реальности
Context 
● Что мы создаем? 
● Кто это использует? 
● Как это размещается в существующем 
техническом окружении? 
● Как это все взаимодействует друг с 
другом?
Container 
● Из каких служб состоит система? 
● Каковы базовые технологические решения и 
выбранные технологии? 
● Какое распределение ответственности в системе? 
● Как “контейнеры” взаимодействуют друг с другом? 
● Где писать код, чтобы реализовать функционал?
для каждого контейнера 
● Имя 
● Технология 
● Ответственность
Component 
● Из каких компонентов состоит система? 
● Как сгруппирована бизнес-логика? 
● Понятно ли прямо сейчас, как это будет 
работать, когда написан код? 
● Все ли компоненты принадлежат какой- 
нибудь службе?
Classes 
UML :)
Еще UML 
● Процессы и порядок выполнения: 
Activity 
● Поведение во время исполнения: 
Sequence, Collaboration 
● Модель предметной области: 
Class, ER 
● Граф состояний: 
State 
● Развертывание системы: 
Deployment
Литература 
● Simon Brown “Software Architecture for 
Developers”

More Related Content

Similar to ПиАПС, Лекция №1б - Представление архитектуры

Powershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systemsPowershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systems
Andrey Vernigora
 
Неотрефлексированный сдвиг парадигмы: от поколений языков программирования вы...
Неотрефлексированный сдвиг парадигмы: от поколений языков программирования вы...Неотрефлексированный сдвиг парадигмы: от поколений языков программирования вы...
Неотрефлексированный сдвиг парадигмы: от поколений языков программирования вы...
Alexey Neznanov
 
Software Engineering Knowledge Matrix
Software Engineering Knowledge MatrixSoftware Engineering Knowledge Matrix
Software Engineering Knowledge Matrix
Olena Syrota
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Dima Dzuba
 
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NETЭволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Dev2Dev
 
Clean architecture on Android
Clean architecture on AndroidClean architecture on Android
Clean architecture on Android
GDG Odessa
 
Методики управления развитием ис на базе 1с
Методики управления развитием ис на базе 1сМетодики управления развитием ис на базе 1с
Методики управления развитием ис на базе 1с
Helen Kopteva
 
Презентация для конкурса на лучшую статью по 3SL Cradle
Презентация для конкурса на лучшую статью по 3SL CradleПрезентация для конкурса на лучшую статью по 3SL Cradle
Презентация для конкурса на лучшую статью по 3SL Cradle
Yulia Madorskaya
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
EatDog
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
GeeksLab Odessa
 
Руководство для программистов по устройству на работу в Unigine
Руководство для программистов по устройству на работу в UnigineРуководство для программистов по устройству на работу в Unigine
Руководство для программистов по устройству на работу в Unigine
Unigine Corp.
 
Концепция продукта
Концепция продуктаКонцепция продукта
Концепция продукта
Yury Kupriyanov
 
Архитектура программных систем на Node.js
Архитектура программных систем на Node.jsАрхитектура программных систем на Node.js
Архитектура программных систем на Node.js
Timur Shemsedinov
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
Levon Avakyan
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12Technopark
 
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Timur Shemsedinov
 
Ddd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovDdd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkov
Maxim Tsepkov
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
Fwdays
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
Dima Denisenko
 
запахи кода
запахи кодазапахи кода
запахи кода
Vitaly Ruzhnikov
 

Similar to ПиАПС, Лекция №1б - Представление архитектуры (20)

Powershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systemsPowershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systems
 
Неотрефлексированный сдвиг парадигмы: от поколений языков программирования вы...
Неотрефлексированный сдвиг парадигмы: от поколений языков программирования вы...Неотрефлексированный сдвиг парадигмы: от поколений языков программирования вы...
Неотрефлексированный сдвиг парадигмы: от поколений языков программирования вы...
 
Software Engineering Knowledge Matrix
Software Engineering Knowledge MatrixSoftware Engineering Knowledge Matrix
Software Engineering Knowledge Matrix
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4
 
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NETЭволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
 
Clean architecture on Android
Clean architecture on AndroidClean architecture on Android
Clean architecture on Android
 
Методики управления развитием ис на базе 1с
Методики управления развитием ис на базе 1сМетодики управления развитием ис на базе 1с
Методики управления развитием ис на базе 1с
 
Презентация для конкурса на лучшую статью по 3SL Cradle
Презентация для конкурса на лучшую статью по 3SL CradleПрезентация для конкурса на лучшую статью по 3SL Cradle
Презентация для конкурса на лучшую статью по 3SL Cradle
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
 
Руководство для программистов по устройству на работу в Unigine
Руководство для программистов по устройству на работу в UnigineРуководство для программистов по устройству на работу в Unigine
Руководство для программистов по устройству на работу в Unigine
 
Концепция продукта
Концепция продуктаКонцепция продукта
Концепция продукта
 
Архитектура программных систем на Node.js
Архитектура программных систем на Node.jsАрхитектура программных систем на Node.js
Архитектура программных систем на Node.js
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12
 
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
 
Ddd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovDdd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkov
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
запахи кода
запахи кодазапахи кода
запахи кода
 

ПиАПС, Лекция №1б - Представление архитектуры

  • 2. Гибкие команды требуют качественной коммуникации ● Визуальная информация >80% ● TDD, ... не дает возможности быстро оглядеть всю картину ● … и код тоже ● Не детальное моделирование мелочей, а скетчи решения
  • 3. Польза от скетчей ● Вся команда и новые участники легко понимают общую картину ● Легко поделиться с командой, что ты собираешься делать ● “Навигационная карта” по коду ● Пространство для анализа рисков ● Пространство для совместной работы
  • 11. Эффективные скетчи Подход C4: ● context ● containers ● components ● classes
  • 12.
  • 13. Внимание ● Принятым обозначениям и нотации ● Не стоит мешать разные уровни абстракции между собой ● Простота ● Основанность на реальности
  • 14. Context ● Что мы создаем? ● Кто это использует? ● Как это размещается в существующем техническом окружении? ● Как это все взаимодействует друг с другом?
  • 15.
  • 16. Container ● Из каких служб состоит система? ● Каковы базовые технологические решения и выбранные технологии? ● Какое распределение ответственности в системе? ● Как “контейнеры” взаимодействуют друг с другом? ● Где писать код, чтобы реализовать функционал?
  • 17.
  • 18. для каждого контейнера ● Имя ● Технология ● Ответственность
  • 19. Component ● Из каких компонентов состоит система? ● Как сгруппирована бизнес-логика? ● Понятно ли прямо сейчас, как это будет работать, когда написан код? ● Все ли компоненты принадлежат какой- нибудь службе?
  • 20.
  • 21.
  • 23. Еще UML ● Процессы и порядок выполнения: Activity ● Поведение во время исполнения: Sequence, Collaboration ● Модель предметной области: Class, ER ● Граф состояний: State ● Развертывание системы: Deployment
  • 24. Литература ● Simon Brown “Software Architecture for Developers”

Editor's Notes

  1. Не понятно, что делает система, только указано, какие технологии в ней будут.
  2. Очевидно, 3-х ярусная архитектура. Круто видеть разбиение бизнес-логики на компоненты, но не понятна ответстенность каждого компонента и их взаимодействие
  3. Просто перечислены элементы функциональной декомпозиции.
  4. Что за зеленый кружок без подписи?
  5. Слишком общее. “Business logic”?
  6. Не ясен выбор технологий.
  7. по. С. Брауну 1. Context: A high-level diagram that sets the scene; including key system dependencies and actors. 2. Container: A container diagram shows the high-level technology choices, how responsi- bilities are distributed across them and how the containers communicate. 3. Component: For each container, a component diagram lets you see the key logical components and their relationships. 4. Classes: This is an optional level of detail and I will draw a small number of high-level UML class diagrams if I want to explain how a particular pattern or component will be (or has been) implemented. The factors that prompt me to draw class diagrams for parts of the software system include the complexity of the software plus the size and experience of the team. Any UML diagrams that I do draw tend to be sketches rather than comprehensive models.
  8. Структура * Users, actors, roles, personas, etc * IT systems Взаимодействие Указывайте цель взаимодействия
  9. By “containers”, I mean the logical executables or processes that make up your software system; such as: • Web servers (e.g. Apache HTTP Server, Apache Tomcat, Microsoft IIS, WEBrick, etc) • Application servers (e.g. IBM WebSphere, BEA/Oracle WebLogic, JBoss AS, etc) • Enterprise service buses and business process orchestration engines (e.g. Oracle Fusion middleware, etc) • SQL databases (e.g. Oracle, Sybase, Microsoft SQL Server, MySQL, PostgreSQL, etc) • NoSQL databases (e.g. MongoDB, CouchDB, RavenDB, Redis, Neo4j, etc) • Other storage systems (e.g. Amazon S3, etc) • File systems (especially if you are reading/writing data outside of a database) • Windows services • Standalone/console applications (i.e. “public static void main” style applications) • Web browsers and plugins • cron and other scheduled job containers
  10. Структура Web servers1 (e.g. Apache HTTP Server, Apache Tomcat, Microsoft IIS, WEBrick, etc) • Application servers (e.g. IBM WebSphere, BEA/Oracle WebLogic, JBoss AS, etc) • Enterprise service buses and business process orchestration engines (e.g. Oracle Fusion middleware, etc) • SQL databases (e.g. Oracle, Sybase, Microsoft SQL Server, MySQL, PostgreSQL, etc) • NoSQL databases (e.g. MongoDB, CouchDB, RavenDB, Redis, Neo4j, etc) • Other storage systems (e.g. Amazon S3, etc) • File systems (especially if you are reading/writing data outside of a database) • Windows services • Standalone/console applications (i.e. “public static void main” style applications) • Web browsers and plugins • cron and other scheduled job containers Взаимодействие • The purpose of the interaction (e.g. “reads/writes data from”, “sends reports to”, etc). • Communication method (e.g. Web Services, REST, Java Remote Method Invocation, Windows Communication Foundation, Java Message Service). • Communication style (e.g. synchronous, asynchronous, batched, two-phase commit, etc) • Protocols and port numbers (e.g. HTTP, HTTPS, SOAP/HTTP, SMTP, FTP, RMI/IIOP, etc).
  11. Whenever I draw a component diagram, it typically only shows the components that reside within a single container. Структура Пакеты, пространства имен, и тд. Взаимодействие • The purpose of the interaction (e.g. “uses”, “persists trade data through”, etc) • Communication style (e.g. synchronous, asynchronous, batched, two-phase commit, etc)