Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Стоит ли изучать pureMVC? (http://www.flasher.ru/forum/showthread.php?t=131159)

wvxvw 15.10.2009 22:39

Как бы это так сказать, NetConnection очень глубоко похоронен в структуре каирнгорма...
Т.е. так для общего представления, что происходит, когда вы вещаете каирнгормовское событие:
Оно попадает в локатор -> локатор дергает команду -> команда дергает remote object -> remote object дергает флексовый класс server -> класс server запускает еще с дюжину разных никому не нужных операций и в итоге мы добираемся до NetConnection или URLLoader и посылаем запрос, возможно, состоящий всего из пары байт... Схема не принимает во внимание всякие заковыристости флексового биндинга, и то так и сколько всякой абсолютно ненужной ерунды произойдет по дороге...

Но главное, что все это абсолютно не нужно... Т.е. номинально это нужно для того, чтобы якобы облегчить разработку, но, на практике АПИ NetConnection или URLLoader - простые как палка и работают, на сколько это можно быстро и с небольшим количеством багов... С другой стороны, весь этот хлам с красивыми названиями работает очень нестабильно, медленно, дебажить его практически нереально из-за идиотов-разработчиков которые насовали туда анонимных функций и их все еще в try-catch завернули...
Это просто какое-то увлечение модной фишкой... написать кучу всякого красиво оформленного Г. и с помпой это преподнести, а потом долго думать, как же и чего с этим делать...

DarkLight 16.10.2009 01:23

Хм, ну анонимные функции и try-catch это не вина Cairngorm-а) А дебажить код такого плана легче, чем простыню из 3000+ строк, т к хоть зачатки логики раскладки на команды есть почти всегда)

wvxvw 16.10.2009 04:03

Как бы фишка в том, что когда руководствуясь лучими побуждениями разработчики этого замечательного продукта писали что-то в духе:
Код AS3:

try {
// this function may be undefined
someFunction.apply(foo, [...]);
}
catch
{
// well, it was undefined, we'll check back later...
}

То просто руки опускаются что-то дальше с этим делать... как по мне, 3000, да хоть 30000 строк, если там нету однозначного бреда, будет проще переварить чем пытаться выяснить на каком этапе в someFunction случилась ошибка...

etc 16.10.2009 12:18

Цитата:

Сообщение от DarkLight (Сообщение 858247)
чем простыню из 3000+ строк

Ооо, если не PureMVC, то не ООП, а значит простыни? Клево.

Nemo_c 16.10.2009 14:26

Цитата:

Сообщение от etc (Сообщение 857891)
Падает уровень разработчика.

В чём конкретно проявляется уровень падения?

DarkLight 16.10.2009 18:11

Цитата:

Ооо, если не PureMVC, то не ООП, а значит простыни? Клево.
Во-первых, я вообще не про PureMVC. Идея в том, что *****код, построенный на архитектурном фреймворке в общем случае легче разбирать, чем *****код, построенный без него. Тот же Flex Framework (2-3), который мозг сломаешь пока разберешь.
Я не считаю что изучение архитектурного фреймворка снижает уровень разработчика, так как для малых/средних проектов их использование экономит время - этап проектирования архитектуры ужимается в несколько раз без особого вреда для конечного результата. В случае команд с частой сменой разработчиков без преемственности, что встречается вокруг да около, аналогичная ситуация - хотя бы часть логики автора на поверхности.

etc 16.10.2009 21:59

Nemo_c, в том, что реализовать своё MVC потом всё труднее и труднее.

DarkLight, его одинаково хреново разбирать, если это *****код. Ещё печальнее, если он юзает фреймворк.

DarkLight 16.10.2009 22:03

Цитата:

реализовать своё MVC потом всё труднее и труднее.
А конструкторам автомобилей ездить на чужих не следует, потому что проектировать машину все труднее и труднее?:D
Наоборот, мы видим в перспективе: если использовать такую-то архитектуру, на таком-то этапе возникают неудобства, соответственно надо предусмотреть, чтобы у себя такого не было.

wvxvw 16.10.2009 22:05

Фишка как раз в том, что когда проблема случается в фреймворке, особенно, типа Флекс / Каирнгорм и т.п. То только на локализацию и выяснение, а что собственно произошло уходят иногда недели... и объяснить человеку, которому этот *****код состряпали за пару дней, что найти и ликвидировать ошибку будет очень сложно - сами понимаете... Фреймворк должны писать и тестировать куча талантливых програмистов, чтобы эта штука была пригодна к применению... а наши АС3 "фреймворки" соотносятся с нормальными разработками, как "Рабинович по телефону напел" с Бетховеном :)

Не ходя далеко за примером:
Код AS3:

        try
        {
            var result:Object = wrappedFunction.apply(thisArg, args);
            wrappedFunctionSuccessful = true;
            return result;
        }
        catch(itemPendingError:ItemPendingError)
        {
            itemPendingError.addResponder(new EvalBindingResponder(this, object));
            if (BindingManager.debugDestinationStrings[destString])
            {
                trace("Binding: destString = " + destString + ", error = " + itemPendingError);
            }
        }
        catch(rangeError:RangeError)
        {
            if (BindingManager.debugDestinationStrings[destString])
            {
                trace("Binding: destString = " + destString + ", error = " + rangeError);
            }
        }
        catch(error:Error)
        {
            // Certain errors are normal when executing a srcFunc or destFunc,
            // so we swallow them:
            //  Error #1006: Call attempted on an object that is not a function.
            //  Error #1009: null has no properties.
            //  Error #1010: undefined has no properties.
            //  Error #1055: - has no properties.
            //  Error #1069: Property - not found on - and there is no default value
            // We allow any other errors to be thrown.
            if ((error.errorID != 1006) &&
                (error.errorID != 1009) &&
                (error.errorID != 1010) &&
                (error.errorID != 1055) &&
                (error.errorID != 1069))
            {
                throw error;
            }
            else
            {
                if (BindingManager.debugDestinationStrings[destString])
                {
                    trace("Binding: destString = " + destString + ", error = " + error);
                }
            }
        }

Вот это достижение человеческого гения... (Это класс Binding, который используется во флексовом фреймворке на каждом шагу). Вот забиндили вы сеттер с ошибкой, ну и ищите его теперь по всему приложению...

etc 16.10.2009 22:06

DarkLight, опираться на опыт, безусловно, необходимо, но головой всё же нужно думать своей, а не исправлять впоследствии недостатки чужой.


Часовой пояс GMT +4, время: 08:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.