ORM (Object -Rational Mapping) czyli mapowanie objektowo-relacyjne struktury danych systemu na bazę danych. Przykłady: Hibernate(Java), ActiveRecord (Ruby on Rails), Doctrine (PHP), Eloquent (PHP).
Używanie tego rozwiązania jest dziś dość modne i nagłośnione przez marketing. Ja uważam że jest to błąd w architekturze który będzie pogłębiany przez kolejne pokolenia programistów, architektów i marketing. Antypatern.
Ale o co chodzi z tym ORM? Ano byli sobie ludzie, którzy chcieli wszystko zmapować w obiekty… i używać danych tak jak w ulubione jezyki robia. Gdy ewoluowały systemy baz danych nie były one projektowane obiektowo a jako osobne płaskie elementy. Ponieważ istniało wiele różnych implementacji baz danych poszukiwano sposobu na ich uproszczenie. Większość baz posługuje się językiem SQL( Structured Query Language). Każda baza jednak posiada swoją własną implementacje jezyka strukturalnego. Te drobne różnice powodują że przeniesienie bazy z jednego rodzaju bazy do drugiego wymaga dużych nakładów programistycznych w kodach aplikacji. Są różne bazy: MsSQL , MySQL, Postgress a także bazy, które nie używają bezpośrednio jezyka relacyjnego SQL choc ich składnia jest bardzo podobna ( NoSQL jak MongoDB, CoachDB itp ).
Tutaj pojawia się rozwiązanie problemów spójności danych – model bazy ORM a raczej jego brak. Programista nie musi się zastanawiać gdzie wysyłać dane, jak używać jezyka SQL dla danej wersji bazy. Lepiej nie trzeba wiedzieć z jaki rodzaj bazy żyje pod oprogramowaniem. Koder pisze sobie kod za pomocą którego manipuluje danymi z poziomu swojego jezyka programowania wewnatzr obiektów i klas. Tu plusy ORM się konczą.
- Jaki sens jest pisac dodatkową powlokę by maniupolować danymi skoro jest SQL?
- Ograniczenia pod kątem ciężkich zapytań których za pomocą ORM sie nie osiągnie. (taaak znaczy mam zly model dlatego sie nie da)
- Ograniczenia wydajności ( suma 1 i 2 )
- Wiodkie pojęcie o programowaniu baz danych lub brak znajomosci SQL
- Pisanie ORM wymaga umiejętności pseudo dialektu SQL. (nowa rzecz do nauki)
- Tranzakcyjność jest dyskusyjna w systemach gdzie jest to wymagane.
Zanim zastosujesz ORM zastanów się kilka razy czy naprawde warto i czy robisz to poprawnie. Koncepcja bywa dobra ale wykonanie już nie.