немножко хайбернейта (aka шозанах)
Sep. 27th, 2012 02:07 pmcatch ( RuntimeException re ) { log().info( "could not bind value '" + nullSafeToString( value ) + "' to parameter: " + index + "; " + re.getMessage() ); throw re; } catch ( SQLException se ) { log().info( "could not bind value '" + nullSafeToString( value ) + "' to parameter: " + index + "; " + se.getMessage() ); throw se; } ...... public String nullSafeToString(Object value) throws HibernateException { return value == null ? null : toString( value ); } ....... public Object stringToObject(String xml) throws Exception { return xml; } public String toString(Object value) { return (String) value; } public Object fromStringValue(String xml) { return xml; }
- a not totally trivial example implemented using JPA and Scala
- an event sourced implementation using explicit state changes
- a straightforward translation of the mutable event sourced implementation into an immutable implementation
- encoding domain knowledge into the type system to make the domain easier to understand and reduce the number of runtime error checks
- Towards an immutable domain model – monads (part 5) the stuff above translated into monads (where it should be)
tell me I'm wrong (or right)
Apr. 4th, 2011 05:09 pmI'm pretty much tired of using so-called "DAO objects", automatically hibernate-generated classes that are dumb and simple; they are being used everywhere throughout the code; I was always willing to fill them with functionality, but, thank god, there was no chance.
Now I think this. Thanks to
mikkim08 ideas for Scala. They should be all wrapped in decorators; and decorators should be returned from DAOs or factories. Performance-wise, it is just one level of indirection, and one more reference per instance. Conceptually, it is an implicit mapping.
E.g. I get "CountryData" from db; it is dumb and know nothing about life, just data. Wrap it in a subclass, and kaboom, an intelligent guy who can tell you this and that... and yes, immutable, since all "setters" are blocked by police.
So there.
Now I think this. Thanks to
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
E.g. I get "CountryData" from db; it is dumb and know nothing about life, just data. Wrap it in a subclass, and kaboom, an intelligent guy who can tell you this and that... and yes, immutable, since all "setters" are blocked by police.
So there.
приключения с шозанахом
Jan. 26th, 2011 02:19 pmШозанахом, как писали где-то полгода назад, умные люди называют Гибернейт.
Я тут чего задумал. Есть у меня таблица на миллион записей, не ахти какая, но, чтобы тест бежал внутри эклипса (внутри эллипса, если эллипс определить как эклипс), надо как-то "оптимизировать" - и вот я впендюрил вью в базу, чтобы мне не все колонки выдёргивать - дальше сгенерировал хабеме файл и джавный файл с "сущностью" этого вью (как по-русски вью называется? Неужели вид? А по-испански виста? А по-украински?)
Короче, получились почему-то два джавных файла. Один для вью, другой для его "айди". И все колонки от вью - в "айди". Ну хорошо, и пишу я к нему Даоса, чтобы читать этот вью, по странам. И этот Даос, будучи не вполне просветлённым, говорит, что у вью нету какого-то то ли рендерера, то ли ещё чего-нить. Тогда я подставляю "айди" класс. И чё, хотя в этом классе все поля определены, Даос Шозанах говорит мне, что у него нет страны. Космополит хренов, этот класс.
Тогда я игнорирую эти все шозанаховы трюки и пишу простой сиквел-запрос, чтобы Даос его исполнял. Но Шозанах и тут не дремлет, и сообщает, что таких полей он не знает, ну и т.д. Я знаю, а он не знает.
И так я провёл если не зиму, так несколько дней. И дошло до меня, что если не умеешь летать, то не надо выпендриваться, а надо читать таблицу вместо вью. Прихожу с утра, меняю код в трёх строчках - и понеслась.
Буду впредь проще. Постараюсь по крайней мере. Мне в предыдущей конторе, забыл как звать, хватило приключений с Шозанахом; мне даже инкриминировали какие-то баги этого Шозанаха, я не успел спросить, да и интереса не было, т.к. эта инкриминация произошла уже при расставании, а в момент расставания лучше не вспоминать плохое, а сосредоточиться на хорошем, поблагодарить за выходное пособие и доставленное удовольствие, посмеяться и пойти по своим делам.
Я тут чего задумал. Есть у меня таблица на миллион записей, не ахти какая, но, чтобы тест бежал внутри эклипса (внутри эллипса, если эллипс определить как эклипс), надо как-то "оптимизировать" - и вот я впендюрил вью в базу, чтобы мне не все колонки выдёргивать - дальше сгенерировал хабеме файл и джавный файл с "сущностью" этого вью (как по-русски вью называется? Неужели вид? А по-испански виста? А по-украински?)
Короче, получились почему-то два джавных файла. Один для вью, другой для его "айди". И все колонки от вью - в "айди". Ну хорошо, и пишу я к нему Даоса, чтобы читать этот вью, по странам. И этот Даос, будучи не вполне просветлённым, говорит, что у вью нету какого-то то ли рендерера, то ли ещё чего-нить. Тогда я подставляю "айди" класс. И чё, хотя в этом классе все поля определены, Даос Шозанах говорит мне, что у него нет страны. Космополит хренов, этот класс.
Тогда я игнорирую эти все шозанаховы трюки и пишу простой сиквел-запрос, чтобы Даос его исполнял. Но Шозанах и тут не дремлет, и сообщает, что таких полей он не знает, ну и т.д. Я знаю, а он не знает.
И так я провёл если не зиму, так несколько дней. И дошло до меня, что если не умеешь летать, то не надо выпендриваться, а надо читать таблицу вместо вью. Прихожу с утра, меняю код в трёх строчках - и понеслась.
Буду впредь проще. Постараюсь по крайней мере. Мне в предыдущей конторе, забыл как звать, хватило приключений с Шозанахом; мне даже инкриминировали какие-то баги этого Шозанаха, я не успел спросить, да и интереса не было, т.к. эта инкриминация произошла уже при расставании, а в момент расставания лучше не вспоминать плохое, а сосредоточиться на хорошем, поблагодарить за выходное пособие и доставленное удовольствие, посмеяться и пойти по своим делам.