neděle 13. května 2007

Do pranice: Jsou persistentní kolekce nutnost nebo vlastnost

Několik posledních dnů řešíme s Lukášem Bartoněm jestli je mapování persistentních kolekcí v ORM nástrojích nutnost a nebo vlastnost. Všechno to začal článek spoluatora Hibernate, Christiana Bauera s názvem Persistent collections are a feature!, ve kterém se snaží uvést na pravou míru jakže to Hibernate zamýšlí s mapováním kolekcí.

Předně nutno poznamenat, že bez mapování kolekci se v ORM nástrojích skutečně obejdete, což si většina vývojářů zprvu neuvědomuje. Kolekce lze celkem snadno nahradit pomocí query. To znamená, že místo to aby vám dotáhnul dceřinou kolekci Hibernate automaticky, tak si tu samou query napíšete ručně.

Tím, že nebudete mapovat kolekce podle mého názoru přijdete o jedno ze základních lákadel, které ORM nástroje nabízejí. Ono lákadlo je pohodlná práce s persistetními daty, aniž by jste nutně museli psát "omáčku" na komunikaci s persistetním úložištěm. Tím myslím především můstek mezi světem objektů a relací.

Přijde mi přirozené, že můžu zavolat parent.getChildren() a dostanu všechny děti daného rodiče. Taktéž mi přijde přirozené, že přidání nového dítěte je jednoduché volání parent.getChildren().add(child). A rozhodně mi nepřijde, že to je jenom nějaké syntaktické cukrátko v podobě pěkné vlastnosti ORM. Můj pohled na věc je, že tohle chování je absolutní povinnost každého ORM nástroje, bez kterého ztrácí ORM nástroje svůj půvab a kouzlo.

Christian Baurer, Gavin King: Java Persitence with Hibernate

One of the reasons you use a full object/relational mapping tool like Hibernate is, of course, that you don’t want to write that query.