ORM, NHibernate и Dapper

Слайд 2

ORM

ORM – object-relational mapping – объектно-реляционное отображение.
Чаще всего данные хранятся в базе

ORM ORM – object-relational mapping – объектно-реляционное отображение. Чаще всего данные хранятся
данных.
Но в коде хочется оперировать объектами.
ORM берет на себя заботы об отображении таблиц в объекты и наоборот.
ORM следит за объектами, умеет сохранять их изменения, создавать новые, читать из базы старые, удалять записи (то есть выполняет полный CRUD)

Слайд 3

А нельзя обойтись без этого?

Можно. Но наличие ORM в проекте существенно облегчает

А нельзя обойтись без этого? Можно. Но наличие ORM в проекте существенно
операции CUD (про Read – чуть позже).
Само собой, дополнительные накладные расходы => жертвуем скоростью.
Много рефлексии => ещё жертвуем скоростью.
Но пользы от ORM довольно много: некоторые из них умеют неплохо работать с каскадами и сами могут создавать (а некоторые и обновлять) схемы БД.

Слайд 4

Почему NH, а не EF?

В DDD нужно разделять различные уровни. Уровень работы

Почему NH, а не EF? В DDD нужно разделять различные уровни. Уровень
с БД, само собой, должен быть выше уровня домена.
NH позволяет естественно отделять домен.
При использовании EF приходится учитывать его особенности при разработке домена.
NH хорошо работает и естественно работает с каскадами.
В EF требуется каскады подтягивать (и удалять) самому.

Слайд 5

NHibernate

Изначально был портирован с Hibernate’а от Java.
Изначально все маппинги хранились в страшных

NHibernate Изначально был портирован с Hibernate’а от Java. Изначально все маппинги хранились
XML-файлах.
При его использовании можно испытывать сильнейшие БОЛИ.

Слайд 6

FluentNHibernate

Конфигуратор для NHibernate.
Позволяет довольно простым кодом регистрировать маппинги (без XML’а!).
Поддерживает так называемые

FluentNHibernate Конфигуратор для NHibernate. Позволяет довольно простым кодом регистрировать маппинги (без XML’а!).
конвенции, по которым будут именоваться таблицы и поля схемы БД.
Рассмотрим использование NH с FluentNH в рамках какого-нибудь простенького проекта.

Слайд 7

Сравнительная таблица NH и массажистки

Сравнительная таблица NH и массажистки

Слайд 8

Слой чтения – больное место NH

NHibernate ОЧЕНЬ плохо подходит для задач составления

Слой чтения – больное место NH NHibernate ОЧЕНЬ плохо подходит для задач
сложных запросов через LINQ. В таких случаях проще писать plain-sql.
Но тут возникает еще одна проблема: а во что (а еще очень часто – как?) маппить результат?