Re[8]: Функции должны быть компактными
От: IT Россия linq2db.com
Дата: 06.06.16 13:48
Оценка: +1
Здравствуйте, AUDev, Вы писали:

AUD>но теоретически ведь можно в твоем случае без хардкода структуры обхода просто делать перебор свойств типа Expression (или типа коллекции/массива Expression) у переданного в Visit объекта, и вызывать Visit для значений этих свойств (или свойств элементов коллекции Expression), если порядок обхода свойств не важен?


Если бы и можно было, то я бы не стал этого делать из соображений производительности.

Но нельзя минимум по двум причинам.
Во-первых, эта структура не однородная. Т.е. в ней встречаются объекты как здесь, которые имеют другой тип, но в них есть наш Expression. Т.е. происходит определённый разрыв.
Во-вторых, в члучае трансформаций для Expression вызывается метод Update специфичный для конкретного типа Expression.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Функции должны быть компактными
От: 0BD11A0D  
Дата: 07.06.16 12:56
Оценка:
Здравствуйте, Пирожочек, Вы писали:

П>Но. Это упростит понимание, только в том случае, если абстракция переиспользуется многократно.


Не согласен.

Если переиспользуется, то экстрагировать надо по соображениям нормализации (грубо говоря, чтобы в дальнейшем править один раз, а не по списку).

А упростить понимание функция может и при однократном использовании — если она соответствует тому, что типичный человек в алгоритме написал бы словами. То есть, Смешать(), Посыпать() и Помазать() это хорошие функции, даже если все это надо сделать только один раз.
Re[3]: Функции должны быть компактными
От: chaotic-kotik  
Дата: 10.06.16 10:55
Оценка:
D>>А что тогда с высоконагруженными приложениями, где кроме как на себя, даже на компилятор положиться нельзя?
N>А что такое "высоконагруженые приложения", пример можно? Или вы чисто теоретически интересуетесь?

Посмотри исходники ScyliaDB (клон Cassandra который может ответить на миллион запросов в секунду) и ответь на свой вопрос.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.