metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-07-19 03:24 pm

Адский холивар

На тему "зачем нужен reflection и метаданные, если все можно писать вручную в коде".
Это пиздец, граждане. Я подозревал, что есть люди абстрагированные от мира реальной разработки и его проблем, но не подозревал, что настолько.

ссылко 1
ссылко 2

[livejournal.com profile] zabivator и второй персонаж оттуда усиленно убеждают, что ничего этого не нужно, а потом комментом ниже предлагают решения, которые являются ничем иным, как закатом солнца реализацией рефлекшена и метаданных вручную.

Я тут сижу, думаю, как бы это вообще всю эту метаданную жопу вынести на уровень модели и генерить из нее код, затем мержить с написанной вручную нетривиальностью и таким образом избавится от 1000-кратного писания одного и того же кода "база данных->sqlreader->поле объекта->веб-сервис->поле объекта на клиенте->элемент гуя->поле объекта->веб-сервис->поле объекта->sqlparameter->база данных". Потому что у меня за пару дней может база на 3-5 таблиц увеличится, в каждой по 10-20 полей, и это все надо выставить юзеру на редактирование, да еще красиво, с подписями на трех разных языках и чтобы работать можно было и с мыши и с клавиатуры и чтобы не тормозило, и чтобы неправильных данных при всем желании запилить нельзя было.

А народу пофег, как я посмотрю. Нужно конфиг руками читать - читают. Понадобится изменения сделать - будут дописывать case в switch или там if/else и молиться, что остальные команды разработчиков код сохранения не поломают, и что имена будут одинаковые.

Видимо, я что-то в современной софторазработке и принятой в ней эффективности работы отдельных разработчиков не понимаю.

[identity profile] raydac.livejournal.com 2009-07-19 12:49 pm (UTC)(link)
я так понимаю что тут скорее "трудности перевода"

[identity profile] mr-aleph.livejournal.com 2009-07-19 12:55 pm (UTC)(link)

[identity profile] metaclass.livejournal.com 2009-07-19 12:58 pm (UTC)(link)
Да, так и есть.
Нужно идти в менеджеры :)

[identity profile] mr-aleph.livejournal.com 2009-07-19 01:00 pm (UTC)(link)
нужно идти во владельцы копьютерных фирм, после чего щупать за попу секретарш и рассуждать о вкусах коньяка...
а программирование это мелко и скучно =)

[identity profile] alexott.livejournal.com 2009-07-19 01:03 pm (UTC)(link)
мир реального программирования у всех разный - у тебя он тесно связан с пользователями, у других с БД, у третьих с ОС или безопасностью...
я вот смотрю на наших жабистов, и от их решений у меня на голове волосы дыбом становятся. а тоже ведь реальная разработка :-)

[identity profile] adontz.livejournal.com 2009-07-19 01:04 pm (UTC)(link)
Не надо ждать пока станешь владельцем, чтоб щупать секретарш :-)

jedem das seine

[personal profile] alll 2009-07-19 01:07 pm (UTC)(link)
У [livejournal.com profile] zabivator'а афаик очень специфическая задача, именно для него держать метаданные непосредственно в коде (а часть и вообще в голове) может оказаться до определённой степени оправданным. Ну а ежели в руках молоток, то всё окружающее начинаешь воспринимать как немножко гвозди.

[identity profile] metaclass.livejournal.com 2009-07-19 01:08 pm (UTC)(link)
Когда у меня возникает желание пощупать секретаршу за жопу, я начинаю думать о теории категорий, функциональном программировании и автоматической генерации гуи на основе системы вывода типов, после чего желание щупать пропадает, т.к. не помещается в мозг :)

Re: jedem das seine

[identity profile] metaclass.livejournal.com 2009-07-19 01:10 pm (UTC)(link)
А, ну логично. Он как раз оные метаданные вместе с данными и обрабатывает своим sql-движком, они для него на другом уровне живут совсем. А для меня они часть дизайна системы.

[identity profile] dmzlj.livejournal.com 2009-07-19 01:31 pm (UTC)(link)
Да вроде кодогенерацией из какой-нить статической метаинформации решается, разве нет? по крайней мере я видел довольно большие проекты, где это было сделано. Есть же даже ормы для статических языков. Что-то то ли я от жары туплю, но не понимаю, о чем базар-вокзал вообще. Есть рефлексия - можно делать и так и сяк, нет рефлексии - можно делать автоматической кодогенерацией из какой-нить метаинформации или DSL.

С конфигом вроде еще проще - забил грамматику, оно тебе разобрало в какую надо структуру.
Рефлексия вообще не вперлась, если структура конфига в рантайме не меняется. Какой еще свич-кейс?

[identity profile] metaclass.livejournal.com 2009-07-19 01:37 pm (UTC)(link)
Ну вот все варианты - кодогенерация, рефлекшен, базовая модель из которой это все создается - это все более менее гуманные варианты. А предлагается что-то вроде:
Field1=ReadIniStr("Section","Name1");
Field2=ReadIniStr("Section","Name2");
итд, и поддерживать это ручками в живом состоянии при изменениях

[identity profile] dmzlj.livejournal.com 2009-07-19 01:45 pm (UTC)(link)
А зачем?


Там тристакамментоф, ниасилю.

[personal profile] alll 2009-07-19 01:53 pm (UTC)(link)
Так и вымрем.

Re: jedem das seine

[personal profile] alll 2009-07-19 01:56 pm (UTC)(link)
Ну вот на самом деле это прикол, которого никто отчего-то не замечает: термин "программист" перестал обозначать более-менее чётко очерченную профессию, в лучшем случае он относится к роду занятий.

[personal profile] alll 2009-07-19 02:05 pm (UTC)(link)
Затем что [livejournal.com profile] zabivator делает движок для реляционных баз данных, а не клиентов для реляционных баз данных. Изделие штучное, с очень жёстко заданными свойствами (что снижает актуальность осознанно используемых метаданных) и жёсткими требованиями к быстродействию (что исключает предметы роскоши в рантайме). Кодогенерация там, афаик, применяется массово (шаблоны C++ - та же кодогенерация), но повод для флейма, насколько я понял - именно рефлекшены и прочие излишества в рантайме.

Re: jedem das seine

[personal profile] alll 2009-07-19 02:13 pm (UTC)(link)
Но что касается меня, то чрезмерное завязывание на рефлекшены заставляет вспомнить поговорку "чем круче джип, тем дальше идти за трактором". Ну то-есть проект сможет всосать в себя ещё больше бессмысленных индусов и развиться чуть дальше, прежде чем окончательно станет неподдерживаемым. Заодно заказчики привыкнут, что сроки исполнения капризов - не дни, а часы, и дедлайны станут куда жёстче.

[identity profile] gds.livejournal.com 2009-07-19 02:56 pm (UTC)(link)
рефлекшн противоестественнен, если есть строгая типиздация и кодогенерация. Лучше ловить всякие разные миленькие приколюшечки в compile time. РОЗАВЕНЬКИМ!1111

[identity profile] zamotivator.livejournal.com 2009-07-19 03:18 pm (UTC)(link)
Лучший коммент.

[identity profile] adontz.livejournal.com 2009-07-19 03:49 pm (UTC)(link)
В compile time можно ловить только то, что пишешь сам.+

[identity profile] gds.livejournal.com 2009-07-19 04:25 pm (UTC)(link)
верно. Но обычно нужно обрабатывать только то, что можешь обработать сам (другое обрабатывать не нужно).

[identity profile] adontz.livejournal.com 2009-07-19 04:29 pm (UTC)(link)
Для крупного приложения, которое, зачастую, пишут вообще разные компании, это не так.

[identity profile] gds.livejournal.com 2009-07-19 04:39 pm (UTC)(link)
варианты "игнорировать значение конфига" и "передать значение конфига для дальнейшей обработки наверх" я не считал вариантом "обработать", отсюда, возможно, недопонимание. Действия "игнорировать"/"передать", конечно, должно быть (какое из них -- решать программисту). Но и тут рефлекшн не нужен.

[identity profile] adontz.livejournal.com 2009-07-19 04:44 pm (UTC)(link)
Задача рефлекшена простая - корректная работа с типами, о которых ничего не известно на этапе компиляции.
Вот вы ратуете за кодогенерацию, но данные для неё, опять таки, могут быть не известны на этапе компиляции. Нужен рефлекш чтобы эти данные получить, а нужен потом генерировать.

[identity profile] gds.livejournal.com 2009-07-19 05:17 pm (UTC)(link)
если у меня в одной программе есть тип данных "простое число" и она сохраняет значения этого типа в конфиг, а в другой программе есть возможность читать конфиг первой программы, сохраняющей некоторые простые числа в конфиг, то каким образом она, имея только конфиг (допустим, plain text или xml), 1. выведет сохранённое значение пользователю? 2. создаст новое значение этого типа? Для полноты картины можно представить, что я храню простые числа как integer, в котором запаковано представление вида 6n+-1.

Максимум, что получится, это скопировать данное значение или игнорировать его. "Получить" его для другого использования в программе -- нереально.
Всё изменится, если вместе со значением будет поставляться код для его преобразования в строку и для прочих операций, для которых не хватает битового представления. Но это уже не рефлекшн, а нечто бОльшее, требующее динамической загрузки кода, поддерживающего необходимые операции.

[identity profile] --ronin--.livejournal.com 2009-07-19 05:31 pm (UTC)(link)
Дядя Джон жжот напалмом =)

Page 1 of 3