Your SlideShare is downloading. ×
0
Управление зависимостями
Сергей Шкредов,
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 framew...
Почти все...
• Независимость
• Прозрачность
• Ценности
• + Инструмент!
Все, спасибо!
Сергей Шкредов, JetBrains
serjic
serjic@jetbrains.com
+7 (911) 9109032
Upcoming SlideShare
Loading in...5
×

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

916

Published on

Published in: Internet
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
916
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×