Адский холивар
Jul. 19th, 2009 03:24 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
На тему "зачем нужен reflection и метаданные, если все можно писать вручную в коде".
Это пиздец, граждане. Я подозревал, что есть люди абстрагированные от мира реальной разработки и его проблем, но не подозревал, что настолько.
ссылко 1
ссылко 2
zabivator и второй персонаж оттуда усиленно убеждают, что ничего этого не нужно, а потом комментом ниже предлагают решения, которые являются ничем иным, как закатом солнца реализацией рефлекшена и метаданных вручную.
Я тут сижу, думаю, как бы это вообще всю эту метаданную жопу вынести на уровень модели и генерить из нее код, затем мержить с написанной вручную нетривиальностью и таким образом избавится от 1000-кратного писания одного и того же кода "база данных->sqlreader->поле объекта->веб-сервис->поле объекта на клиенте->элемент гуя->поле объекта->веб-сервис->поле объекта->sqlparameter->база данных". Потому что у меня за пару дней может база на 3-5 таблиц увеличится, в каждой по 10-20 полей, и это все надо выставить юзеру на редактирование, да еще красиво, с подписями на трех разных языках и чтобы работать можно было и с мыши и с клавиатуры и чтобы не тормозило, и чтобы неправильных данных при всем желании запилить нельзя было.
А народу пофег, как я посмотрю. Нужно конфиг руками читать - читают. Понадобится изменения сделать - будут дописывать case в switch или там if/else и молиться, что остальные команды разработчиков код сохранения не поломают, и что имена будут одинаковые.
Видимо, я что-то в современной софторазработке и принятой в ней эффективности работы отдельных разработчиков не понимаю.
Это пиздец, граждане. Я подозревал, что есть люди абстрагированные от мира реальной разработки и его проблем, но не подозревал, что настолько.
ссылко 1
ссылко 2
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Я тут сижу, думаю, как бы это вообще всю эту метаданную жопу вынести на уровень модели и генерить из нее код, затем мержить с написанной вручную нетривиальностью и таким образом избавится от 1000-кратного писания одного и того же кода "база данных->sqlreader->поле объекта->веб-сервис->поле объекта на клиенте->элемент гуя->поле объекта->веб-сервис->поле объекта->sqlparameter->база данных". Потому что у меня за пару дней может база на 3-5 таблиц увеличится, в каждой по 10-20 полей, и это все надо выставить юзеру на редактирование, да еще красиво, с подписями на трех разных языках и чтобы работать можно было и с мыши и с клавиатуры и чтобы не тормозило, и чтобы неправильных данных при всем желании запилить нельзя было.
А народу пофег, как я посмотрю. Нужно конфиг руками читать - читают. Понадобится изменения сделать - будут дописывать case в switch или там if/else и молиться, что остальные команды разработчиков код сохранения не поломают, и что имена будут одинаковые.
Видимо, я что-то в современной софторазработке и принятой в ней эффективности работы отдельных разработчиков не понимаю.
no subject
Date: 2009-07-21 01:07 pm (UTC)Сравнительно с генерацией исходного кода и его компиляцией -- да, устранение промежуточного звена уменьгшает возможность ошибок.
> с одной стороны, я пропустил слово "возможно", отвлекшись
Принято. Часто с рефлекшеном бывает и довольно корявый код.
> инструментированием байткода, что как бы кодогенерация и есть.
Ну так рефлекшен в Яве как раз кодогенерацией и реализован. Во ирония судьбы.
no subject
Date: 2009-08-08 06:49 am (UTC)По иронии судьбы, в Алкателе огромный пласт кода на Яве генерируется из DSL'ей.
И там этому подходу лет уже под десяток будет.
Reflection подразумевает обработку структур языка средствами языка.
Т.е. reflection - eDSL.
Плюсовые шаблоны - тоже eDSL
Кодогенерация - это DSL. Это означает, что на входные данные и реализацию генератора не накладывается ограничений, что есть в reflection. Накладываются другие - меппинг семантики и типов не даётся бесплатно, его приходится продумывать. Но с другой стороны, на него можно положить болт, и оставить верификацию сгенерированного кода на совесть компилятора и/или интерпретатора целевого языка.
no subject
Date: 2009-08-10 02:42 pm (UTC)И это очень хорошо. Нет "импеданс мисматч".
> Это означает, что на входные данные и реализацию генератора не накладывается ограничений, что есть в reflection.
А вот это мрак и ужас. Когда программа на одном языке начинает обрабатываться другим... Вспоминается, как запускали написанную под ДОС MS-фортран-программу через компиляцию в Си на солярисе. Конечно не завелась, и пришлось vi делать тупые переделки пару часов.
В конце концов баги будут в кодогенераторах, и вот тут-то я злорадно посмеюсь над попытками найти и исправить баги. То ли в оригинальной программе бага, то ли в генераторе, то ли в целевом компиляторе. Шайтан!!!