SlideShare a Scribd company logo
1 of 30
Вторая конференция .NET разработчиков Прагматический подход к разработке гибких программных систем Степан Родионов www.rodionovstepan.ru twitter.com/rodionovstepan
Ортогональность
Неортогональная система
Что дает ортогональность? Разбиение системы на независимые модули
GRASP(General Responsibility Assignment Software Patterns) High cohesion Low coupling
Low coupling
Демонстрация
Вспомогательные практики ,[object Object]
Принцип DRY
Принцип «Говори, а не спрашивай»
Принципы SOLID
И прочие…,[object Object]
Поднимаемся выше Класс Класс Класс Компонент Система
Принципы проектирования компонентов
Принципы сцепленности компонентов ,[object Object]
Common Reuse Principle
Common Closure Principle,[object Object]
Ациклический граф Application Message Box Tasks XML Format File Formats Dialogs Windows
Циклический граф Application Message Box Tasks XML Format File Formats Dialogs Windows
Применение DIP Dialogs Class A Application Class B Application A Class B A Server
Введение нового компонента Application Message Box Tasks XML Format New File Formats Dialogs Windows
Stable-Dependencies Principle Зависимости должны быть направлены в сторону устойчивости
Устойчивость A B Устойчивый компонент Неустойчивый компонент
Метрика устойчивости
Компоненты с разной устойчивостью Неустойчивый  (S = 0) Неустойчивый  (S = 0) S = 0.75 Устойчивый  (S = 1) Stable S = 0.25 Flexible Идеальная схема Нарушение SDP
Решение проблемы Stable (S = 0.75) Stable U Interface (S = 1) Flexible (S = 0.25) Flexible U U IU V V
Stable-Abstractions Principle Компонент должен быть столь же абстрактным, сколь и устойчивым
Главная последовательность A (1,1) (0,1) d(K) = |A(K) – S(K)| Зона бесполезности Главная последовательность Зона неприятностей 1 - S (0,0) (1,0)
Применение d 0.1 t 1.0 1.1 1.2 1.3 2.0
NDepend

More Related Content

Viewers also liked

Fuse8.domain framework - анонс библиотеки для работы с данными
Fuse8.domain framework - анонс библиотеки для работы с даннымиFuse8.domain framework - анонс библиотеки для работы с данными
Fuse8.domain framework - анонс библиотеки для работы с даннымиAlexander Byndyu
 
Аспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложенийАспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложенийAlexander Byndyu
 
Getting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестированияGetting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестированияAlexander Byndyu
 
Highload. Создание специализированных высокопроизводительных индексов
Highload. Создание специализированных высокопроизводительных индексовHighload. Создание специализированных высокопроизводительных индексов
Highload. Создание специализированных высокопроизводительных индексовAlexander Byndyu
 
Расширение функциональности с использованием метаданных и аспектно-ориентиров...
Расширение функциональности с использованием метаданных и аспектно-ориентиров...Расширение функциональности с использованием метаданных и аспектно-ориентиров...
Расширение функциональности с использованием метаданных и аспектно-ориентиров...Alexander Byndyu
 
IronRuby: внутренности и примеры использования
IronRuby: внутренности и примеры использованияIronRuby: внутренности и примеры использования
IronRuby: внутренности и примеры использованияAlexander Byndyu
 
Big switch: жизнь после Microsoft
Big switch: жизнь после MicrosoftBig switch: жизнь после Microsoft
Big switch: жизнь после MicrosoftAlexander Byndyu
 
Метапрограммирование интерфейсов в ASP.NET MVC Framework
Метапрограммирование интерфейсов в ASP.NET MVC FrameworkМетапрограммирование интерфейсов в ASP.NET MVC Framework
Метапрограммирование интерфейсов в ASP.NET MVC FrameworkAlexander Byndyu
 
Автоматизированное тестирование веб приложений
Автоматизированное тестирование веб приложенийАвтоматизированное тестирование веб приложений
Автоматизированное тестирование веб приложенийAlexander Byndyu
 
Agile: разработка + тестирование
Agile: разработка + тестированиеAgile: разработка + тестирование
Agile: разработка + тестированиеAlexander Byndyu
 
Приемочные тесты на огурце
Приемочные тесты на огурцеПриемочные тесты на огурце
Приемочные тесты на огурцеAlexander Byndyu
 
Практика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanПрактика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanAlexander Byndyu
 
TDD или как не выстрелить себе в ногу
TDD или как не выстрелить себе в ногуTDD или как не выстрелить себе в ногу
TDD или как не выстрелить себе в ногуAlexander Byndyu
 
Построение процесса тестирования
Построение процесса тестированияПостроение процесса тестирования
Построение процесса тестированияAlexander Byndyu
 

Viewers also liked (17)

Fuse8.domain framework - анонс библиотеки для работы с данными
Fuse8.domain framework - анонс библиотеки для работы с даннымиFuse8.domain framework - анонс библиотеки для работы с данными
Fuse8.domain framework - анонс библиотеки для работы с данными
 
Карьера в IT
Карьера в ITКарьера в IT
Карьера в IT
 
Аспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложенийАспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложений
 
Getting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестированияGetting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестирования
 
BizSpark
BizSparkBizSpark
BizSpark
 
Highload. Создание специализированных высокопроизводительных индексов
Highload. Создание специализированных высокопроизводительных индексовHighload. Создание специализированных высокопроизводительных индексов
Highload. Создание специализированных высокопроизводительных индексов
 
Расширение функциональности с использованием метаданных и аспектно-ориентиров...
Расширение функциональности с использованием метаданных и аспектно-ориентиров...Расширение функциональности с использованием метаданных и аспектно-ориентиров...
Расширение функциональности с использованием метаданных и аспектно-ориентиров...
 
IronRuby: внутренности и примеры использования
IronRuby: внутренности и примеры использованияIronRuby: внутренности и примеры использования
IronRuby: внутренности и примеры использования
 
Big switch: жизнь после Microsoft
Big switch: жизнь после MicrosoftBig switch: жизнь после Microsoft
Big switch: жизнь после Microsoft
 
Метапрограммирование интерфейсов в ASP.NET MVC Framework
Метапрограммирование интерфейсов в ASP.NET MVC FrameworkМетапрограммирование интерфейсов в ASP.NET MVC Framework
Метапрограммирование интерфейсов в ASP.NET MVC Framework
 
Автоматизированное тестирование веб приложений
Автоматизированное тестирование веб приложенийАвтоматизированное тестирование веб приложений
Автоматизированное тестирование веб приложений
 
Agile: разработка + тестирование
Agile: разработка + тестированиеAgile: разработка + тестирование
Agile: разработка + тестирование
 
Приемочные тесты на огурце
Приемочные тесты на огурцеПриемочные тесты на огурце
Приемочные тесты на огурце
 
Пробуем Kanban!
Пробуем Kanban!Пробуем Kanban!
Пробуем Kanban!
 
Практика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanПрактика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к Kanban
 
TDD или как не выстрелить себе в ногу
TDD или как не выстрелить себе в ногуTDD или как не выстрелить себе в ногу
TDD или как не выстрелить себе в ногу
 
Построение процесса тестирования
Построение процесса тестированияПостроение процесса тестирования
Построение процесса тестирования
 

Similar to Прагматичный подход к разработке гибких программных систем

Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОLuxoft Education Center
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаPavel Treshnikov
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Sergey Nemchinsky
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программированияITCP Community
 
Принципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаПринципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаСергей Шебанин
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpGoSharp
 
HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1Technopark
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноBubon Makabra
 
Секрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдноСекрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдноCUSTIS
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8Technopark
 
SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASPdevel123
 
Шаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPШаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPSergey Nemchinsky
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsSergey Schetinin
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
Современна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерияСовременна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерияMarcus Akoev
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpgeekfamilyrussia
 

Similar to Прагматичный подход к разработке гибких программных систем (20)

Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайна
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программирования
 
Принципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаПринципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайна
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
 
Секрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдноСекрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдно
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
 
SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASP
 
Шаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPШаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASP
 
Agile Requirements
Agile RequirementsAgile Requirements
Agile Requirements
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocols
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
Современна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерияСовременна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерия
 
drools introduction
drools introductiondrools introduction
drools introduction
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 

More from Alexander Byndyu

Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...Alexander Byndyu
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеAlexander Byndyu
 
Антихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить измененияАнтихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить измененияAlexander Byndyu
 
Карта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планированияКарта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планированияAlexander Byndyu
 
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиКак перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиAlexander Byndyu
 
История о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проектаИстория о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проектаAlexander Byndyu
 
Шпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателяШпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателяAlexander Byndyu
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияAlexander Byndyu
 
IT-директор на аутсорсе
IT-директор на аутсорсеIT-директор на аутсорсе
IT-директор на аутсорсеAlexander Byndyu
 
Бизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуруБизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуруAlexander Byndyu
 
Impact Mapping на практике v2
Impact Mapping на практике v2Impact Mapping на практике v2
Impact Mapping на практике v2Alexander Byndyu
 
Кнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаКнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаAlexander Byndyu
 
Пять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктовПять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктовAlexander Byndyu
 
Пять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектовПять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектовAlexander Byndyu
 
Impact mapping in practice
Impact mapping in practiceImpact mapping in practice
Impact mapping in practiceAlexander Byndyu
 
Impact Mapping на практике
Impact Mapping на практикеImpact Mapping на практике
Impact Mapping на практикеAlexander Byndyu
 
Customer satisfaction для программистов
Customer satisfaction для программистовCustomer satisfaction для программистов
Customer satisfaction для программистовAlexander Byndyu
 
CQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафорCQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафорAlexander Byndyu
 
Как размножается Sphinx
Как размножается SphinxКак размножается Sphinx
Как размножается SphinxAlexander Byndyu
 

More from Alexander Byndyu (20)

Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзе
 
Антихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить измененияАнтихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить изменения
 
Карта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планированияКарта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планирования
 
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиКак перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
 
История о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проектаИстория о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проекта
 
Шпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателяШпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателя
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс Россия
 
IT-директор на аутсорсе
IT-директор на аутсорсеIT-директор на аутсорсе
IT-директор на аутсорсе
 
Бизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуруБизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуру
 
Impact Mapping на практике v2
Impact Mapping на практике v2Impact Mapping на практике v2
Impact Mapping на практике v2
 
Кнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаКнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продукта
 
Пять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктовПять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктов
 
Пять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектовПять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектов
 
Час Кода 2015
Час Кода 2015Час Кода 2015
Час Кода 2015
 
Impact mapping in practice
Impact mapping in practiceImpact mapping in practice
Impact mapping in practice
 
Impact Mapping на практике
Impact Mapping на практикеImpact Mapping на практике
Impact Mapping на практике
 
Customer satisfaction для программистов
Customer satisfaction для программистовCustomer satisfaction для программистов
Customer satisfaction для программистов
 
CQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафорCQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафор
 
Как размножается Sphinx
Как размножается SphinxКак размножается Sphinx
Как размножается Sphinx
 

Прагматичный подход к разработке гибких программных систем