SlideShare a Scribd company logo
Fody
Против рутины
Константин Васильев, Очень Интересно
О себе
● .NET 4+ лет
● SQL
● Knockout, Angular 1/2
● .NET @ Очень Интересно
2
Fody
Средство для манипуляций над IL кодом ваших сборок,
встраивается в билд-процесс
Позволяет упростить некоторые рутинные задачи
Ближайший аналог - PostSharp
3
Проекты, использующие Fody
● Catel
● Enums.NET
● NServiceBus
● Orchestra & all Orc.* components
4
Конфигурация
5
Конфигурация
6
INotifyPropertyChanged
7
INotifyPropertyChanged
8
Equals
9
Equals
10
???
11
Fody
● .NET 4.5.2+
● .NET Core 1.0+
12
Fody
● .NET 4.5.2+
● .NET Core 1.0+
Не поддерживаются проекты:
● project.json
● xproj
● .csproj в старом формате
13
Fody
● .NET 4.5.2+
● .NET Core 1.0+
Не поддерживаются проекты:
● project.json
● xproj
● .csproj в старом формате
Не работает функция “Edit and continue”
14
Процесс билда с Fody
Fody добавляет дополнительные шаги в пайплайн MSBuild.
Когда билдится проект, Fody:
● Находит файлы сборки и pdb файлы
15
Процесс билда с Fody
Fody добавляет дополнительные шаги в пайплайн MSBuild.
Когда билдится проект, Fody:
● Находит файлы сборки и pdb файлы
● Парсит их с помощью Mono.Cecil
16
Процесс билда с Fody
Fody добавляет дополнительные шаги в пайплайн MSBuild.
Когда билдится проект, Fody:
● Находит файлы сборки и pdb файлы
● Парсит их с помощью Mono.Cecil
● По порядку выполняет все включённые плагины
17
Процесс билда с Fody
Fody добавляет дополнительные шаги в пайплайн MSBuild.
Когда билдится проект, Fody:
● Находит файлы сборки и pdb файлы
● Парсит их с помощью Mono.Cecil
● По порядку выполняет все включённые плагины
● Изменённая сборка сохраняется вместе с обновлённым
pdb файлом
18
ToString
Автоматически генерирует метод ToString для классов
19
Obsolete
Предоставляет удобный интерфейс для использования
атрибута Obsolete
20
Obsolete
Предоставляет удобный интерфейс для использования
атрибута Obsolete
21
Obsolete
Предоставляет удобный интерфейс для использования
атрибута Obsolete
22
Undisposed
Помогает отслеживать не освобождённые из памяти объекты
Работает только с пользовательскими типами
23
Null
● Внезапные NullReferenceException
24
Null
● Внезапные NullReferenceException
● Компилятор беспомощен
25
NullGuard
Автоматически добавляет проверки на null
Работает для свойств и методов (входные и выходные
значения)
В режиме Debug вместо исключений вызывает Debug.Assert
26
Anotar
Добавляет абстракцию над используемым логгером
Поддерживает Log4Net, NLog, Serilog, Catel, CommonLogging,
LibLog, NServiceBus, Splat
27
Anotar
Добавляет абстракцию над используемым логгером
Поддерживает Log4Net, NLog, Serilog, Catel, CommonLogging,
LibLog, NServiceBus, Splat
Предоставляет:
● Статичные методы для логгирования
● Атрибуты для логгирования необработанных исключений в
методе
● Статичные свойства для проверки, включено ли
логгирование какого-либо уровня 28
Anotar
29
Anotar
30
Anotar
31
QueryValidator
Валидирует SQL-запросы во время компиляции
32
Аспектно-ориентированное программирование
● Проблема отделения сквозной функциональности
33
Аспектно-ориентированное программирование
● Проблема отделения сквозной функциональности
● Аспекты
34
Без АОП
Платежи Товары Магазины
35
Без АОП
Платежи Товары Магазины
Транзакции, трассировка
36
Без АОП
Платежи
АОП
Товары Магазины
Транзакции, трассировка
Платежи Товары Магазины
Транзакции Трассировка
37
Cauldron
Позволяет добавлять интерцепторы для
методов/конструкторов/свойств
38
Cauldron
39
Собственный плагин
40
Собственный плагин
41
Собственный плагин
42
Собственный плагин
43
Плюсы
+ Позволяет существенно упростить некоторые рутинные
задачи
44
Плюсы
+ Позволяет существенно упростить некоторые рутинные
задачи
+ Легко встраивается в проект
45
Плюсы
+ Позволяет существенно упростить некоторые рутинные
задачи
+ Легко встраивается в проект
+ Можно писать собственные плагины
46
Минусы
- Очень неочевидная вещь
47
Минусы
- Очень неочевидная вещь
- Усложняет процесс дебага
48
Минусы
- Очень неочевидная вещь
- Усложняет процесс дебага
- Некоторые плагины нужно допиливать
49
Минусы
- Очень неочевидная вещь
- Усложняет процесс дебага
- Некоторые плагины нужно допиливать
- Писать с нуля плагин - не просто
50
Ссылочки
https://github.com/Fody/Fody
http://www.mono-project.com/Cecil/
https://habrahabr.ru/post/309462/
https://www.postsharp.net/
51
Спасибки
● vk.com/ko_vasilev
● github.com/ko-vasilev
● oppa.kostya.bko@gmail.com
52

More Related Content

PDF
Как анимировать тысячи объектов на карте и не подвесить браузер
PDF
Как приручить реактивное программирование
PDF
C&C for coffee'n'code
PDF
Дефицит ресурсов тестирования... или нет?
PDF
TeaVM: dead code elimination and devirtualization
PDF
Автоматизация UI-тестирования следующего поколения
PDF
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
PDF
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Как анимировать тысячи объектов на карте и не подвесить браузер
Как приручить реактивное программирование
C&C for coffee'n'code
Дефицит ресурсов тестирования... или нет?
TeaVM: dead code elimination and devirtualization
Автоматизация UI-тестирования следующего поколения
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt

What's hot (20)

PDF
UICov - инструмент анализа покрытия UI-тестами
PDF
Cеминар в Виннице (22.03.2014)
PPTX
Автоматическое тестирование Web api
PDF
Grail: шаги для ваших Python-тестов
PDF
Визуализация покрытия автоматизированными UI тестами
PDF
Badger — инструмент для мониторинга качества продуктов
PDF
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
PDF
Unit tests & tdd in web development
POTX
Разработка надежных параллельных, распределенных приложений: быстро и дешево
PDF
Экономически эффективный процесс тестирования
PPTX
Елена Жукова "Жизнь вне JavaScript"
PDF
Микросервисы: взгляд сверху и в бок
PDF
Автоматическое тестирование. Моя система
PDF
Евгений Сафронов "Тестирование. точка зрения разработчика"
PDF
Как это будет: ASP.NET Core
PDF
Robot Framework: универсальный инструмент автоматизатора
PDF
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
PDF
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
PDF
Тестировщик в Agile - кто он?
PDF
Илья Кудинов
UICov - инструмент анализа покрытия UI-тестами
Cеминар в Виннице (22.03.2014)
Автоматическое тестирование Web api
Grail: шаги для ваших Python-тестов
Визуализация покрытия автоматизированными UI тестами
Badger — инструмент для мониторинга качества продуктов
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Unit tests & tdd in web development
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Экономически эффективный процесс тестирования
Елена Жукова "Жизнь вне JavaScript"
Микросервисы: взгляд сверху и в бок
Автоматическое тестирование. Моя система
Евгений Сафронов "Тестирование. точка зрения разработчика"
Как это будет: ASP.NET Core
Robot Framework: универсальный инструмент автоматизатора
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Тестировщик в Agile - кто он?
Илья Кудинов
Ad

Similar to Константин Васильев «Fody против рутины» (20)

PDF
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
PDF
Масштабируемая архитектура фронтенда
PDF
Проходим тест Джоэла
PDF
Алексей Андросов - Debugger: Отладка кода
PDF
Tech Talks @NSU: Проходим тест Джоэла
PDF
Юрий Василевский «Автоматизация в XCode»
PDF
Юрий Василевский "Автоматизация в XCode"
PPTX
Автоматическая сборка и развертывание на платформе 1C
PDF
Дизайн больших приложений в ФП
PDF
Артем Титаренко
PDF
ekbpy'2012 - Михаил Коробов - Python 3
PDF
REPL в Node.js: улучшаем быт разработчик
PDF
Выбираем стратегию создания бранчей
PDF
Иван Крутов - Автоматизация сборки Java-проекта
PPTX
Little Service in 2h
PPTX
Git for you
PDF
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
PDF
Профессиональная разработка в суровом Enterprise
PDF
Практика разработки веб-серверов на Rust
PDF
XP.Party (iOS) - testable code & architecture
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Масштабируемая архитектура фронтенда
Проходим тест Джоэла
Алексей Андросов - Debugger: Отладка кода
Tech Talks @NSU: Проходим тест Джоэла
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский "Автоматизация в XCode"
Автоматическая сборка и развертывание на платформе 1C
Дизайн больших приложений в ФП
Артем Титаренко
ekbpy'2012 - Михаил Коробов - Python 3
REPL в Node.js: улучшаем быт разработчик
Выбираем стратегию создания бранчей
Иван Крутов - Автоматизация сборки Java-проекта
Little Service in 2h
Git for you
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Профессиональная разработка в суровом Enterprise
Практика разработки веб-серверов на Rust
XP.Party (iOS) - testable code & architecture
Ad

More from SpbDotNet Community (20)

PPTX
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
PPTX
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
PDF
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
PDF
Слава Бобик «NancyFx для самых маленьких»
PDF
Игорь Лабутин «Коллекционируем данные в .NET»
PDF
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
PDF
Артём Акуляков - F# for Data Analysis
PPTX
Анатолий Кулаков «The Metrix has you…»
PPTX
Роман Неволин «Провайдеры типов без боли и магии»
PDF
Дмитрий Верескун «Синтаксический сахар C#»
PDF
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
PDF
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
PDF
Алексей Мерсон «Domain Driven Design: профит малой кровью»
PPTX
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
PPTX
Михаил Щербаков «Что может быть проще: делегаты и события»
PDF
Никита Каменский «Есть ли жизнь с UWP?»
PPTX
Александр Кугушев «Roslyn: очевидные неочевидности»
PPTX
ДотаНетоЛогия: СПб 2017
PDF
Юрий Волков «VM via F#»
PPTX
Павел Федотовский «Документация REST API c использованием Swagger»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Слава Бобик «NancyFx для самых маленьких»
Игорь Лабутин «Коллекционируем данные в .NET»
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
Артём Акуляков - F# for Data Analysis
Анатолий Кулаков «The Metrix has you…»
Роман Неволин «Провайдеры типов без боли и магии»
Дмитрий Верескун «Синтаксический сахар C#»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
Алексей Мерсон «Domain Driven Design: профит малой кровью»
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
Михаил Щербаков «Что может быть проще: делегаты и события»
Никита Каменский «Есть ли жизнь с UWP?»
Александр Кугушев «Roslyn: очевидные неочевидности»
ДотаНетоЛогия: СПб 2017
Юрий Волков «VM via F#»
Павел Федотовский «Документация REST API c использованием Swagger»

Константин Васильев «Fody против рутины»