Опять срачь за ORM
Apr. 5th, 2013 12:01 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
http://tonsky.livejournal.com/275048.html
Если обработаться на жабе и дотнете, то записи в таблицах БД действительно начинают казаться объектами, только заколдованными злыми DBA по чернокнижию дейта и кодда. И нужно использовать специальные магические зелья в виде ORM чтобы объекты расколдовать.
А если работать в основном с СУБД и понимать, что "базе-то не объекты, в базе именно что отношения." то внезапно оказывается, что объекты-то не так часто и нужны, а иногда и вообще вредны.
Оно конечно выглядит просто - "взял из ORM объект, показал в форме, по нажатию ОК отдал его ORM на сохранение". Но подобные решения намертво увязывают структуру БД, результаты запросов и типы объектов в программе. И вынуждают использовать в БД только структуры данных, которые хорошо в такое укладываются.
Если обработаться на жабе и дотнете, то записи в таблицах БД действительно начинают казаться объектами, только заколдованными злыми DBA по чернокнижию дейта и кодда. И нужно использовать специальные магические зелья в виде ORM чтобы объекты расколдовать.
А если работать в основном с СУБД и понимать, что "базе-то не объекты, в базе именно что отношения." то внезапно оказывается, что объекты-то не так часто и нужны, а иногда и вообще вредны.
Оно конечно выглядит просто - "взял из ORM объект, показал в форме, по нажатию ОК отдал его ORM на сохранение". Но подобные решения намертво увязывают структуру БД, результаты запросов и типы объектов в программе. И вынуждают использовать в БД только структуры данных, которые хорошо в такое укладываются.
no subject
Date: 2013-04-05 05:08 pm (UTC)no subject
Date: 2013-04-05 05:28 pm (UTC)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...
no subject
Date: 2013-04-06 02:42 am (UTC)Если у нас динамическая типизация - касты лишние.
Плюс к тому, надо помнить, что 99.99% геттеров и сеттеров навсегда остаются тривиальными.