100
Micro-ORM для жизни Кожевников Дмитрий .NET Developer ПАО Росбанк

Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

Embed Size (px)

Citation preview

Page 1: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

Micro-ORM для жизни

Кожевников Дмитрий.NET DeveloperПАО Росбанк

Page 2: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

2

Это я

• Кожевников Дмитрий• ПАО Росбанк (скоро AstroSoft)• .NET Enterprise 5 лет• Спикер dev2dev, dotnetconf, devday• [email protected]

Page 3: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

3

Page 4: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

4

ORM

Page 5: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

5

Пример - Сущность

Page 6: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

6

ADO.NET Mapping

Page 7: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

7

ADO.NET Mapping

Page 8: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

8

ADO.NET Mapping

Page 9: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

9

ADO.NET Mapping

Page 10: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

10

ADO.NET Mapping

Page 11: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

11

ADO.NET Mapping

Page 12: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

12

ADO.NET Mapping

Page 13: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

13

.Net ORM

Page 14: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

14

Nuget-социология№ Package Downloads1 EntityFramework 6.1.3 2 414 6892 Nhibernate 3.3.3.4 (8.09.2013) 223 7633 Dapper 1.42 220 9964 Simple.Data 0.19.0 (10.12.2013) 46 6005 Linq2db 1.0.7.3 4 5126 NPoco 2.10.11 3 4187 OrmLite 4.0.52 2 196

Page 15: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

15

Крутые пацаны

Page 16: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

16

ADO.NET Mapping

Page 17: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

17

ORM way (Entity Framework)

Page 18: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

18

Entity Framework Context

Page 19: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

19

Entity Framework Context

Page 20: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

20

Entity Framework Context

Page 21: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

21

Entity Framework Context

Page 22: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

22

ORM way (Entity Framework)

Page 23: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

23

EF SQL

Page 24: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

24

ORM way (NHibernate)

Page 25: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

25

NHibernate Configuration

Page 26: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

26

NHibernate SQL

Page 27: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

27

NHibernate constraints

Page 28: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

28

Heavy-ORM features

• O/R Mapping• Генерация SQL• Object Model <= => DB Scheme• Ассоциации• Lazy Loading• Миграции• Change Tracking

Page 29: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

29

Heavy ORM fails

• LINQ != SQL• Bulk insert, update, delete• Oracle Sequence, stored procedures• Analytical functions

Page 30: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

30

ORM-Hate

http://martinfowler.com/bliki/OrmHate.html

Page 31: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

31

Что делать?

• Расширение фреймворка• ADO.NET остров• Micro-orm (<= мне нравится это вариант)• NoSql

Page 32: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

32

ORM-way Dapper

Page 33: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

33

ORM-way Dapper

Page 34: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

34

ORM-way Dapper

Page 35: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

35

ORM-way Dapper

Page 36: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

36

ORM-way Dapper

Page 37: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

37

ORM-way Dapper

Page 38: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

38

ORM-way Dapper

Page 39: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

39

Dapper - Основные методы

Page 40: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

40

Dapper - Запрос в объекты

Page 41: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

41

Dapper - Запрос в объекты

Page 42: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

42

Dapper - Запрос в объекты

Page 43: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

43

Dapper - Запрос в объекты

Page 44: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

44

Dapper Запрос ассоциаций

Page 45: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

45

Dapper Запрос ассоциаций

Page 46: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

46

Dapper Запрос ассоциаций

Page 47: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

47

Dapper Запрос ассоциаций

Page 48: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

48

Dapper Запрос ассоциаций

Page 49: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

49

Dapper – QueryMultiple

Page 50: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

50

Dapper – QueryMultiple

Page 51: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

51

Dapper – QueryMultiple

Page 52: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

52

Dapper – QueryMultiple

Page 53: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

53

Dapper – QueryMultiple

Page 54: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

54

Dapper – Bulk Insert

Page 55: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

55

Dapper – Bulk Insert

Page 56: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

56

Dapper – Bulk Insert

Page 57: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

57

Dapper – Bulk Insert

Page 58: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

58

Dapper – Bulk Insert

Page 59: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

59

Dapper – Bulk Insert

Page 60: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

60

Dapper – Bulk Insert

Page 61: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

61

Dapper – Bulk Update\Delete

Page 62: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

62

Итоги о Dapper

• Быстрый• SQL-ориентированный• Простой• Чистый O/R Mapping

Page 63: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

63

Page 64: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

64

Dapper - простой

• Простой API• Работа с IDbConnection, IDbTransaction• Convention over Configuration• Небольшой open-source проект

Page 65: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

65

Page 66: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

66

Page 67: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

67

Dapper маппит запросы

Page 68: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

68

Dapper маппит параметры

Page 69: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

69

Page 70: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

70

Dapper скромный

• Не скрывает БД• Не генерирует SQL• Не управляет соединениями• Не управляет транзакциями

Page 71: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

71

Ниша

• Много мелких запросов• Сложные SQL запросы• Интеграционные решения• Приложение вторичные к БД• Демонстрационные приложения

Page 72: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

72

О проблемах

• Генерация SQL• Трекинг изменений• Поддержка Linq

Page 73: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

73

Экосистема Dapper

Page 74: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

74

Генерация SQL

Page 75: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

75

Dapper.Contrib

Page 76: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

76

Dapper.Contrib Сущность

Page 77: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

77

Dapper.Contrib Сущность

Page 78: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

78

Dapper.Contrib Get<>()

Page 79: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

79

Dapper.Contrib SQL

Page 80: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

80

Dapper.Contrib ChangeTracking

Page 81: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

81

Dapper.Contrib ChangeTracking

Page 82: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

82

Dapper.Rainbow

Page 83: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

83

Dapper.Rainbow

Page 84: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

84

Dapper.Rainbow Database<T>

Page 85: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

85

Dapper.Rainbow

Page 86: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

86

Dapper.Rainbow Table<T>

Page 87: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

87

Dapper.Rainbow Get<>()

Page 88: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

88

Dapper.Rainbow SQL

Page 89: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

89

Page 90: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

90

SqlGun

Page 91: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

91

Dapper совсем не против EF

Page 92: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

92

Dapper.EntityFramework.Extenstions

Page 93: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

93

Dapper.EntityFramework.Extenstions

Page 94: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

94

Поддержка LINQ

Page 95: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

95

Поддержка LINQ

Page 96: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

96

Ссылки на исходные коды

• https://github.com/StackExchange/dapper-dot-net

• https://github.com/thiagoamarante/Dapper.EntityFramework.Extensions

Page 98: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

98

EnityFramework raw SQL

Page 99: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

99

NHibernate raw SQL

Page 100: Micro orm для жизни. Кожевников Дмитрий D2D Just.NET

100

Спасибо за внимание!

Кожевников Дмитрий[email protected]