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. Позволяет довольно простым кодом регистрировать маппинги (без

FluentNHibernate

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

называемые конвенции, по которым будут именоваться таблицы и поля схемы БД.
Рассмотрим использование NH с FluentNH в рамках какого-нибудь простенького проекта.
Слайд 7

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

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

Слайд 8

Слой чтения – больное место NH NHibernate ОЧЕНЬ плохо подходит для

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

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

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