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

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

(no subject)

[personal profile] alll - 2009-07-19 13:53 (UTC) - Expand

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

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

jedem das seine

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

Re: jedem das seine

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

Re: jedem das seine

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

Re: jedem das seine

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

Re: jedem das seine

[identity profile] lionet.livejournal.com 2009-07-20 12:14 am (UTC)(link)
У индусов сроки разработки — недели только на то, чтобы цвет фона поправить.

Эффективность джаваиндусской разработки сильно преувеличена. Быстрее [livejournal.com profile] zabivator выучит Swing, чем очередной индус очередную кнопку добавит.

И стоит это дороже, чем своих программистов держать.

P.S. Информация от крупного и постоянного американского заказчика аутсорса в известной идусской конторе.

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

[identity profile] volodymir-k.livejournal.com 2009-07-19 06:22 pm (UTC)(link)
> Да вроде кодогенерацией из какой-нить статической метаинформации решается, разве нет?

Если код ещё не написан, то где получить его метаинформацию?
Или написан, но исходники не даются?
Да и просто, где и как её получать -- есть стандартные тулы для всех платформ?

[identity profile] dmzlj.livejournal.com 2009-07-19 06:56 pm (UTC)(link)
Метаинформацию можно написать перед тем, как писать код. Ну и не любой код нужно серализовывать или класть в базу. Соответственно, часто большую часть DAO / CRUD можно генерировать автоматически.

Или зайти с другой стороны - генерировать код из DDL.

[identity profile] volodymir-k.livejournal.com 2009-07-19 07:31 pm (UTC)(link)
> Метаинформацию можно написать перед тем, как писать код

САМОМУ??? В 2009 ГОДУ???

(no subject)

[identity profile] metaclass.livejournal.com - 2009-07-19 19:35 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-07-19 21:39 (UTC) - Expand

(no subject)

[identity profile] lionet.livejournal.com - 2009-07-20 00:16 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-07-20 07:24 (UTC) - Expand

(no subject)

[identity profile] lionet.livejournal.com - 2009-07-20 07:28 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-07-20 07:38 (UTC) - Expand

(no subject)

[identity profile] lionet.livejournal.com - 2009-07-20 07:58 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-07-21 13:03 (UTC) - Expand

(no subject)

[identity profile] lionet.livejournal.com - 2009-07-21 13:14 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2009-07-20 07:41 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-07-20 07:46 (UTC) - Expand

(no subject)

[identity profile] lionet.livejournal.com - 2009-07-20 08:00 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-07-21 13:04 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2009-07-20 02:56 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-07-20 07:32 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2009-07-20 07:38 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-07-20 07:51 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2009-07-20 07:57 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-07-21 13:07 (UTC) - Expand

(no subject)

[identity profile] zamotivator.livejournal.com - 2009-08-08 06:49 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-08-10 14:42 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2009-07-20 07:59 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2009-07-20 09:36 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2009-07-20 09:38 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-07-21 13:09 (UTC) - Expand

(no subject)

[identity profile] zamotivator.livejournal.com - 2009-08-08 06:52 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2009-08-08 08:53 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2009-08-10 14:57 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2009-08-10 15:11 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2009-08-11 08:42 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2009-08-11 09:50 (UTC) - Expand

[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)
Для крупного приложения, которое, зачастую, пишут вообще разные компании, это не так.

(no subject)

[identity profile] gds.livejournal.com - 2009-07-19 16:39 (UTC) - Expand

(no subject)

[identity profile] adontz.livejournal.com - 2009-07-19 16:44 (UTC) - Expand

(no subject)

[identity profile] gds.livejournal.com - 2009-07-19 17:17 (UTC) - Expand