Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dapper + QueryObject

Dapper + QueryObject

More Decks by Александр Бындю

Other Decks in Technology

Transcript

  1. Dapper + QueryObject
    Александр Бындю


    www.byndyu.ru

    View Slide

  2. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Обо мне
    1. Владелец компании ByndyuSoft

    http://www.byndyusoft.com

    2. Консультант по вопросам разработки приложений и организации работы IT компаний

    3. Внештатный сотрудник Академии АйТи


    4. Технический блог http://blog.byndyu.ru

    5. Преподаю в ЮУрГУ

    6. Тренер на AgileCamp

    7. Организую конференции .NET-разработчиков

    http://www.dotnetconf.ru


    8. Веду группу по проблемам разработки приложений https://groups.google.com/forum/?hl=ru&fromgroups#!forum/dotnetconf

    View Slide

  3. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Проблематика
    1. Скорость


    2. Гибкость запросов


    3. Утечки памяти


    4. Много чтения, мало записи

    View Slide

  4. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Dapper = Data Mapper
    1. GitHub: https://github.com/SamSaffron/dapper-dot-net


    2. Nuget: https://nuget.org/packages/Dapper


    3. DataMapper: http://martinfowler.com/eaaCatalog/dataMapper.html


    «Dapper is a single file you can drop in to
    your project that will extend your
    IDbConnection interface»

    View Slide

  5. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Ключевая особенность
    1. Высокая скорость
    маппинга


    2. Низкоуровневое
    управление запросами


    3. Отсутствие накладных
    расходов

    View Slide

  6. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Примеры
    Полный список примеров:


    https://github.com/SamSaffron/dapper-dot-net/blob/master/Tests/Tests.cs

    View Slide

  7. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    QueryObject
    Описание шаблона: http://martinfowler.com/eaaCatalog/
    queryObject.html


    • Инкапсулируем логику составления
    запроса

    View Slide

  8. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Примеры с QueryObject
    Полный список примеров:


    https://github.com/AlexanderByndyu/ByndyuSoft.Infrastructure/tree/master/
    source/Infrastructure.Dapper.Tests/CRUD

    View Slide

  9. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Кэширование запросов в MSSQL
    • Точный кэш запроса


    • Использование параметров


    Как SQL Server компилирует динамический SQL


    http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part3

    View Slide

  10. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Профилирование
    • Стандартный MSSQL профайлер


    • MiniProfiler: https://nuget.org/packages/
    MiniProfiler

    View Slide

  11. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Преимущества
    1. Высокая скорость работы


    2. Стабильность, отсутствие утечек памяти;


    3. Гибкость при создании запросов;


    4. Легок для работы приложения, не
    требователен к ресурсам;


    5. Чистый домен приложения, без
    дополнительных интерфейсов и изменения
    кода для работы ORM;


    6. Надо больше думать при работе с данными.

    View Slide

  12. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Недостатки
    1. Написание SQL-кода вручную;


    2. Нет готового кэша и готовых
    провайдеров для кэширования;


    3. Надо больше думать при работе с
    данными;


    4. Сложно работать с вложенными
    сущностями;


    5. SQL-код будет зависеть от СУБД.

    View Slide

  13. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Расширения для Dapper
    1. Dapper.Rainbow


    2. Dapper Async


    3. Dapper.Contrib


    4. Dapper.Extensions

    View Slide

  14. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Аналоги
    • Massive


    • PetaPoco


    • OrmLite


    • Simple.Data


    • BLToolkit


    Примеры использования разных microORM: http://
    yobriefca.se/blog/2011/06/21/microorms-for-dotnet-inserts-
    updates-deletes

    View Slide

  15. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Ссылки:
    1. Пример использования: https://github.com/
    AlexanderByndyu/ByndyuSoft.Infrastructure/tree/
    master/source/Infrastructure.Dapper


    2. Описание причин перехода: http://blog.byndyu.ru/
    2013/03/dapper-queryobject-orm.html


    3. Обертка в NuGet: https://nuget.org/packages/
    Infrastructure.Dapper

    View Slide

  16. «Dapper + QueryObject», Александр Бындю, ByndyuSoft
    Спасибо за внимание!


    Буду рад ответить на ваши
    вопросы лично или через:
    blog.byndyu.ru



    alexanderbyndyu


    [email protected]


    View Slide