Siłą ORM jest to, że pozwala modelować zachowanie aplikacji przy użyciu technik obiektowych. W starannie zaprojektowanym świecie dostępna jest jedna warstwa aplikacji, w której język firmy idealnie pasuje do języka zespołu programistów. ORM umożliwia to, jeśli ORM jest używany rozsądnie.
Słabość polega na tym, że liczba osób, które tak naprawdę naprawdę korzystają z programowania obiektowego, jest niewielka. Wiele osób pisze spaghetti i klopsiki, z silnie sprzężonymi obiektami, które mają małe własne zachowania, a rzeczywiste zachowanie kończy się w ohydnych 8000-liniowych klasach „Service” i „Manager”, a ten kod jest często tak zawiły, że wszyscy się boją zmiany, ponieważ nie mogą dowiedzieć się, jakie będą skutki uboczne.
Ponadto wiele osób tak naprawdę nie ma modelu relacyjnego. ORM nie pomoże im go zdobyć i nie pomoże im poprzez wyodrębnienie modelu relacyjnego. Pozwala to tylko wcześnie skoncentrować się na warstwie domeny i uzyskać ją tuż przed nadmiernym zaniepokojeniem projektem bazy danych. Jeśli jest dobrze zastosowany, za pomocą rozsądnych narzędzi do migracji schematów, a ORM może pomóc w zapobieganiu narastaniu długów kodu.
Zbudowałem aplikacje, w których ORM zapewniał prosty, czytelny i testowalny kod aplikacji oraz miał odpowiednią wydajność. Zachowałem również aplikacje, w których wzorzec był niewłaściwie używany, a kod był zawiły, niestabilny, wolny i delikatny; okazuje się, że ORM nie miał z tym wiele wspólnego, poza tym, że zamiast pisać zły kod, który źle modelował domenę aplikacji, starszy zespół inżynierów napisał zły kod, który źle modelował domenę aplikacji ORAZ zły kod warstwy usług, który pomijał wszystkie wartość, którą może zapewnić ich ORM.
ORM nie uczynią cię mądrzejszym, ale w rękach właściwego programisty może prowadzić do łatwiejszego w utrzymaniu i wyższej jakości kodu.