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

36
Управление зависимостями Сергей Шкредов, dev lead at JetBrains

description

 

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

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

Управление зависимостями

Сергей Шкредов, dev lead at

JetBrains

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

Инструменты разработчика

1. Закрытость

2. Нецелевое использование:

• Программирование на JavaScript

• Использование ООП для всего

• Проекты для контроля зависимостей

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

Проекты и сборки

1. Что это?

• Единица компиляции

• Единица разработки

• Единица исполнения

• dll-ка, jar-ник

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

А что мы делаем?

1. Поставляем пакеты

• Но разрабатываем сборки

2. Контролируем архитектуру

• Используем сборки

• Но хотим большей гранулярности

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

С чем мы сталкивались?

• internal – продлить область видимости:

• InternalsVisibleTo

• internal – сузить область видимости:

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

Про зависимости

• DIP – dependency inversion principle

• IOC – inversion of control

• SOLID

• DI – dependency injection

• Как помогают инструменты?

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

Инверсия зависимостей

Прямая зависимость

Move To Folder Refactoring

Drag&DropIn Code Diagram

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

Инверсия зависимостей

Инвертированная зависимость

Move To Folder Refactoring

Drag&DropIn Code Diagram

MoveEvent

Синтез абстракций

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

SRP?

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

Используем сборки

Core

Util

Shared

Services

H=?

...

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

Используем сборки

System.Xml.dll

System.dll?

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

Используем сборки

System.Xml.dll

System.dll

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

Как мы работаем

http://www.bonkersworld.net/

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

Как мы работаем

http://www.valvesoftware.com/

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

УЖЦ (ака ALM)

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

Что еще случится?1. Код перейдет другим разработчикам

2. Изменятся внешние условия

3. Изменятся Ваши представления о мире

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

Резюме1. Управление пакетами

2. Управление зависимостями

3. Распространение знаний

4. Взаимодействие команд

5. Распределенная ответственность

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

А как у Вас?

A

XВ точно входа мы

«знаем» про все компоненты

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

А как у Вас?

XВ точке входа мы«знаем» только

что и как загрузить

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

Расширяемая программа

[MyAppComponent]Class X {}

[MyAppComponent]Class Y {}

*.dll

Интроспекция

Композиция

X

Y

Завершение

Котнейнерыкомпонентов

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

КонтейнерыX

Y

Z

U

V 1. Создание

2. Переиспользование

3. Инъекция зазвисимостей

4. Метапрограммирование

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

Production

Окружения

Test

Common

Интерфейс илиОбщая реализация

Специфические реализации

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

Application

Document

Время жизни

Контэйнер для приложения

Контэйнер открытого документа и т.п.

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

РасширяемостьCodeCompletionItems( IEnumerable<IItemsProvider> ps)

• Агрегация результатов

• Модификация поведения

• Приоритизация

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

ReSharper• Общий код

• 15+ Языков

• Реализация 50+ различных функций

• 5+ Окружений

• 30+ Разработчиков

• 8+ Продуктов

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

Сборки для управления зависимостями

Services

C# JSFeature A Feature B

VS Test

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

Ромбики из сборокServices

C# JS

C# + JS

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

Продукты и эволюция• ReSharper

• dotTrace (платформа)

• dotPeek (С#, навигация, ...)

• CLI – инспекции

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

Итого 1

Сборка

Аспект

Единица контроля зависимостей

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

Итого 2

Пакет 1Сборка 1

Сборка 3

Сборка 2 Проект

?

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

Итого 3

R# Features

R# Product dotCover

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

Зоны

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

Зоны

C# Zone JS Zone

Services

C# JS

C# + JS

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

Зоны: запуск приложения• Статический анализ

• Валидация после компиляции

• Продукт определяет актуальные зоны

• DI framework знает про зоны

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

Почти все...• Независимость

• Прозрачность

• Ценности

• + Инструмент!

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

Все, спасибо!

Сергей Шкредов, JetBrains serjic [email protected]+7 (911) 9109032