metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-04-05 12:01 pm

Опять срачь за ORM

http://tonsky.livejournal.com/275048.html

Если обработаться на жабе и дотнете, то записи в таблицах БД действительно начинают казаться объектами, только заколдованными злыми DBA по чернокнижию дейта и кодда. И нужно использовать специальные магические зелья в виде ORM чтобы объекты расколдовать.

А если работать в основном с СУБД и понимать, что "базе-то не объекты, в базе именно что отношения." то внезапно оказывается, что объекты-то не так часто и нужны, а иногда и вообще вредны.

Оно конечно выглядит просто - "взял из ORM объект, показал в форме, по нажатию ОК отдал его ORM на сохранение". Но подобные решения намертво увязывают структуру БД, результаты запросов и типы объектов в программе. И вынуждают использовать в БД только структуры данных, которые хорошо в такое укладываются.

[identity profile] glorphindale.livejournal.com 2013-04-05 05:08 pm (UTC)(link)
В народ десять лет вдалбливали, что надо писать геттеры и сеттеры. Вот маятник в другую сторону и качнулся.

[identity profile] volodymir-k.livejournal.com 2013-04-05 05:28 pm (UTC)(link)
да-да,
String userId = p.getUserId();
Number amount = p.getAmount();
p.setCode(PAID_CODE);

это ужас-ужас, а правильно

String userId = (String) p.get("UserId");
Number amount = (Number) p.get("Amount");
p.set("Code", PAID_CODE);

это ж совсем другое дело, никаких get/set... o wait...

[identity profile] glorphindale.livejournal.com 2013-04-06 02:42 am (UTC)(link)
Если мы моделируем сущность без поведения и у нас статическая типизация, то нам достаточно структуры с прямым доступом к полям.
Если у нас динамическая типизация - касты лишние.

Плюс к тому, надо помнить, что 99.99% геттеров и сеттеров навсегда остаются тривиальными.