SlideShare a Scribd company logo
Управление зависимостями
Сергей Шкредов,
dev lead at JetBrains
Инструменты разработчика
1. Закрытость
2. Нецелевое использование:
• Программирование на JavaScript
• Использование ООП для всего
• Проекты для контроля зависимостей
Проекты и сборки
1. Что это?
• Единица компиляции
• Единица разработки
• Единица исполнения
• dll-ка, jar-ник
А что мы делаем?
1. Поставляем пакеты
• Но разрабатываем сборки
2. Контролируем архитектуру
• Используем сборки
• Но хотим большей гранулярности
С чем мы сталкивались?
• internal – продлить область видимости:
• InternalsVisibleTo
• internal – сузить область видимости:
Про зависимости
• DIP – dependency inversion principle
• IOC – inversion of control
• SOLID
• DI – dependency injection
• Как помогают инструменты?
Инверсия зависимостей
Прямая зависимость
Move To Folder
Refactoring
Drag&Drop
In Code Diagram
Инверсия зависимостей
Инвертированная зависимость
Move To Folder
Refactoring
Drag&Drop
In Code Diagram
MoveEvent
Синтез абстракций
SRP?
Используем сборки
Core
Util
Shared
Services
H=?
...
Используем сборки
System.Xml.dll
System.dll
?
Используем сборки
System.Xml.dll
System.dll
Как мы работаем
http://www.bonkersworld.net/
Как мы работаем
http://www.valvesoftware.com/
УЖЦ (ака ALM)
Что еще случится?
1. Код перейдет другим разработчикам
2. Изменятся внешние условия
3. Изменятся Ваши представления о мире
Резюме
1. Управление пакетами
2. Управление зависимостями
3. Распространение знаний
4. Взаимодействие команд
5. Распределенная ответственность
А как у Вас?
A
X
В точно входа мы
«знаем» про все компоненты
А как у Вас?
X
В точке входа мы
«знаем» только
что и как загрузить
Расширяемая программа
[MyAppComponent]
Class X {}
[MyAppComponent]
Class Y {}
*.dll
Интроспекция
Композиция
X
Y
Завершение
Котнейнеры
компонентов
Контейнеры
X
Y
Z
U
V 1. Создание
2. Переиспользование
3. Инъекция зазвисимостей
4. Метапрограммирование
Production
Окружения
Test
Common
Интерфейс или
Общая реализация
Специфические реализации
Application
Document
Время жизни
Контэйнер для
приложения
Контэйнер открытого
документа и т.п.
Расширяемость
CodeCompletionItems(
IEnumerable<IItemsProvider> ps
)
• Агрегация результатов
• Модификация поведения
• Приоритизация
ReSharper
• Общий код
• 15+ Языков
• Реализация 50+ различных функций
• 5+ Окружений
• 30+ Разработчиков
• 8+ Продуктов
Сборки для управления
зависимостями
Services
C# JS
Feature A Feature B
VS Test
Ромбики из сборок
Services
C# JS
C# + JS
Продукты и эволюция
• ReSharper
• dotTrace (платформа)
• dotPeek (С#, навигация, ...)
• CLI – инспекции
Итого 1
Сборка
Аспект
Единица контроля
зависимостей
Итого 2
Пакет 1
Сборка 1
Сборка 3
Сборка 2 Проект
?
Итого 3
R# Features
R# Product dotCover
Зоны
Зоны
C# Zone JS Zone
Services
C# JS
C# + JS
Зоны: запуск приложения
• Статический анализ
• Валидация после компиляции
• Продукт определяет актуальные зоны
• DI framework знает про зоны
Почти все...
• Независимость
• Прозрачность
• Ценности
• + Инструмент!
Все, спасибо!
Сергей Шкредов, JetBrains
serjic
serjic@jetbrains.com
+7 (911) 9109032

More Related Content

PDF
Javaone 2013 moscow gradle
PDF
Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.
PDF
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
PDF
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
PDF
Как не наступить на грабли, внедряя скрипты в java приложение
PDF
Dagger 2
PDF
На пути к совершенному инжинирингу
PDF
C# Web. Занятие 14.
Javaone 2013 moscow gradle
Евгений Джамалов. Agile в условиях мульти-вендорности и распределённых команд.
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Как не наступить на грабли, внедряя скрипты в java приложение
Dagger 2
На пути к совершенному инжинирингу
C# Web. Занятие 14.

What's hot (20)

PPTX
Gradle. Новый уровень автоматизации для Android
PDF
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
PDF
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
PDF
Николай Крапивный
PPTX
Gradle. Новый уровень автоматизации для Android
PPT
непрерывная интеграция шаг к непрерывному деплою родионов игорь
PDF
Непрерывная интеграция - шаг к непрерывному деплойменту
PDF
Особенности внедрения KPI или как доказать, что Ваш «зеленый» проект реально ...
PDF
It meetup cd
PDF
React & Redux (Lazarev)
PDF
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
PPTX
Agile testing
PDF
Архитектурные решения при создании облачного сервиса на Asp.Net
PDF
Знакомьтесь, DevOps
PDF
Релизимся чаще, или тернистый путь к continuous delivery
PDF
Олег Бунин (Онтико) | Менеджмент и бизнес-процессы в разработке highload-прое...
PDF
Общие технологии между несколькими проектами в Яндексе
PPTX
разработка корп приложений на платформе 1с 8
PDF
Модульное тестирование и TDD в .NET
PDF
Kotlin в production. Как и зачем?
Gradle. Новый уровень автоматизации для Android
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Николай Крапивный
Gradle. Новый уровень автоматизации для Android
непрерывная интеграция шаг к непрерывному деплою родионов игорь
Непрерывная интеграция - шаг к непрерывному деплойменту
Особенности внедрения KPI или как доказать, что Ваш «зеленый» проект реально ...
It meetup cd
React & Redux (Lazarev)
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
Agile testing
Архитектурные решения при создании облачного сервиса на Asp.Net
Знакомьтесь, DevOps
Релизимся чаще, или тернистый путь к continuous delivery
Олег Бунин (Онтико) | Менеджмент и бизнес-процессы в разработке highload-прое...
Общие технологии между несколькими проектами в Яндексе
разработка корп приложений на платформе 1с 8
Модульное тестирование и TDD в .NET
Kotlin в production. Как и зачем?
Ad

More from CodeFest (20)

PDF
Alexander Graebe
PDF
Никита Прокопов
PPTX
Денис Баталов
PDF
Елена Гальцина
PDF
Александр Калашников
PDF
Ирина Иванова
PDF
Marko Berković
PDF
Денис Кортунов
PDF
Александр Зимин
PDF
Сергей Крапивенский
PDF
Сергей Игнатов
PDF
Alexander Graebe
PDF
Вадим Смирнов
PDF
Константин Осипов
PDF
Raffaele Rialdi
PDF
Максим Пугачев
PDF
Rene Groeschke
PDF
Иван Бондаренко
PDF
Mete Atamel
PDF
Алексей Акулович
Alexander Graebe
Никита Прокопов
Денис Баталов
Елена Гальцина
Александр Калашников
Ирина Иванова
Marko Berković
Денис Кортунов
Александр Зимин
Сергей Крапивенский
Сергей Игнатов
Alexander Graebe
Вадим Смирнов
Константин Осипов
Raffaele Rialdi
Максим Пугачев
Rene Groeschke
Иван Бондаренко
Mete Atamel
Алексей Акулович
Ad

CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход от правил к ценностям.