metaclass: (Default)
[personal profile] metaclass
На тему "зачем нужен reflection и метаданные, если все можно писать вручную в коде".
Это пиздец, граждане. Я подозревал, что есть люди абстрагированные от мира реальной разработки и его проблем, но не подозревал, что настолько.

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

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

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

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

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

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

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

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

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

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

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 3rd, 2025 11:22 pm
Powered by Dreamwidth Studios