Jarosław
Żeliński
Analityk i
Projektant Systemów
Temat: We are not OOP programmers anymore
Jarosław S.:
Jarosław Ż.:
gdzie ORM powstał (jak sama nazwa wskazuje) głównie do mapowania obiektowej logiki na relacyjne utrwalanie, jest to jeden z głównych zabójców wydajności i rozszerzalności (modyfikowalności) aplikacji
pozwolę się nie zgodzić, a przynajmniej nie na tak "radykalne" wnioski. Aplikację bazodanową w ORM zamiast w SQL tworzy się z reguły szybciej (w czystym JDBC trzeba i tak zrobić "swoje mapowanie" na obiekty DTO / encje i dorobić operacje zapisu / odczytu) i z mniejszą błedogennością niż w JDBC. Dodatkowo konserwacja jest znacznie prostsza przy dużej liczbie relacji mapowanej na JOINy itp. bo zmiana jest w jednym miejscu a nie w kilku/nastu/dziesięciu, automatycznie "propagowanie" zmian w mapowaniu są znacznie prostsze niż w JDBC. To są zalety. Co do wydajności to jest to też trochę kontrowersyjna teza. Jest narzut dodatkowy z ORM'a i czasami jest wymagane podpatrywanie ORM'a jak tłumaczy sobie zapytania, ale też są cache L1 i L2 które przy bogatym grafie encji mocno potrafią pomóc. Według mnie nie powinno się generalizować na temat JDBC vs ORM co do wydajności, bo jak to w wielu innych miejscach w technologii "to zależy".
Mam wrażenie, że zatracamy granicę pomiędzy projektem "obiektowym" a implementacją. Nie przeczę, że pewne konstrukcje implementacji są "anemiczne" czy ORM bywa przydatny. Uważam, że złe są te implementacje, które psują projekty. Np. mając kilka niezależnych agregatów (nazwijmy jej DDD) możemy utrzymać ich niezależność stosując proste mapowanie active table lub active record, a możemy zniszczyć projekt normalizując "dane" i tworząc skomplikowane mapowanie ORM na bazę znormalizowanych danych, silnie z sobą powiązanych danych. Mi chodzi generalni eo to by nie niszczyć zalet "obiektowych" projektów (hermetyzacja, brak wzajemnych powiązań itp.)