Pull to refresh
50
0
Victor Zaitsev @Melnosta

User

Send message
Минус данного подхода — зависимость от Oracle SQL Developer'а. Это означает, что запускать тесты в любимом многими ораклистами TOAD'е скорее всего не получится. Прикрутить тесты к автоматизированному билду на jenkins с запуском через sqlplus тоже не выйдет.

Мы используем самописный pl/sql фреймворк для запуска тестов в стиле junit'а, который активно использует savepoint'ы. Перед запуском теста фреймворк сохраняет состояние базы, выполняет тест, затем откатывает состояние базы до сейвпоинта. После этого сохраняет результаты теста. Есть нюанс с автономными транзакциями, но это мелочи.
https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/savepoint_statement.htm

В довесок имеем набор вспомогательных процедур для дампа таблиц и кверей, сравнения курсоров, итд. Дебажиться сплошное удовольствие. 700+ pl/sql интеграционных тестов. Полет нормальный.
Базового функционала явно не хватает. Поэтому народ жалуется на i18n/l10n и пишет свои сервисы, модули итд.
Спасибо, что то похожее думалось сделать, но времени не хватило. Попробую еще раз взяться за angular при первой возможности.
Не беспокойся, это в качестве примера. Inline стили тоже для дебага были. Потом все стили плавно переползают в less.

Вот чего хочется избежать, так это:
1. Необходимо всю разметку перенести в отдельный файл-шаблон и заменить опцию template на templateUrl.


Темплейтов куча. Делать кучу запросов к серверу за темплейтами не хочется. Держать темплейты в одном месте тоже. Как быть?

Интернационализации в angular'е нет.
Мне очень нравится модульность Angular'a. В рамках же single-page приложения очень хочется избежать постоянной подгрузки темплейтов с сервера. А ввиду большого количества темплейтов, крайне не хочется хранить все темплейты в одной куче в рутовом index.html, а перенести их в конкретные модули. С простыми темплейтами нет проблем, но как всегда хочется большего. Нужна интернализация, автоматическая подстановка значений из разных scope'ов, быстрая динамическая перестройка html. Первого в angular'е нет, но можно самому написать через директивы; подстановка работает с некоторыми ограничениями; а вот динамически менять dom достаточно муторно. По сути, нужно каждый раз компилировать темплейты, чтобы работали подстановки и выполнялись директивы. Наверно тут нужно определенное мастерство, т.к. то же самое на jquery виджетах делается в 10 раз быстрее и занимает меньше кода. В идеале, возможно было бы здорово совместить jquery виджеты (UI) с angular'овскими модулями (logic), но что-то по-простому это не сращивается.

Не знаю что бы такого в качестве примера привести… За полгода уже подзабылось малость. Ниже идет простенькая директива с кнопками OpenID провайдеров. По сути, приходится темплейты описывать конкатенацией строк, т.е. все описывается декларативно. Если нужно динамически менять какой-нибудь css аттрибут — в темплейт добавляется директива. Если нужен action — добавляется директива. Нужна интернализация — добаляется директива. Форматирование? — директива итд. Так код очень быстро сильно захламляется ненужным синтаксисом. Если же нужно вставить новый блок с другим виджетом динамически… Тут уже траблы. В общем, чем больше виджеты, тем сложнее с ними работать ;)

Если кто подскажет как правильно и эффективно работать с директивами — буду только рад.

angular.module('sipSsoLogin.directive', [ 'sipCommonI18n', 'sipSsoLogin.controller' ]).directive('sipSsoLogin', function () {

    var buttonTemplate = '<button id="sipSsoProvider_%PROVIDER%" ng-click="onProviderSelected(\'%PROVIDER%\')"><div class="sipSsoProvider sipSsoProvider_%PROVIDER%"></div></button>';

    function getProviderButtonTemplate(provider) {
        return buttonTemplate.split("%PROVIDER%").join(provider);
    };

    return {
        restrict: 'E',
        template:
            '<div ng-controller="sipSsoLogin">' +

                '<div class="sipSsoPanel_text" sip-common-i18n="sso.login.directive" />' +
                '<div>' +
                getProviderButtonTemplate('google') +
                getProviderButtonTemplate('yahoo') +
                getProviderButtonTemplate('yandex') +
                getProviderButtonTemplate('twitter') +
                '</div><div>' +
                getProviderButtonTemplate('openid') +
                getProviderButtonTemplate('myopenid') +
                getProviderButtonTemplate('facebook') +
                getProviderButtonTemplate('vkontakte') +
                '</div><div class="sipSsoPanel_inputContainer">' +

                '<button style="float: right; margin: 0px 10px 0px 10px;" sip-common-i18n="sso.button.login"></button>' +
                '<div style="overflow: hidden;" class="sipSsoPanel_inputField">' +
                '<span style="float: left; padding-right: 5px; vertical-align: middle;">{{prefix}}</span>' +
                '<div style="overflow: hidden">' +
                '<input style="display: inline-block; width: 100%;" type="text" value="{{user}}">' +
                '</div>' +
                '</div>' +

                '</div>',
        replace: true
    };

});

На документацию по AngularJS грех жаловаться. На официальном сайте её много. От туториалов, до продвинутых сценариев с примерами. Одни юнит тесты чего стоят! Если нужно что-то большее — есть поисковики и исходники.
Вот чего действительно не хватает, так это альтернативы директивам. Простенькие или многостраничные сайты на директивах нормально пишутся, но если заходит речь о динамических single-page приложениях, то с директивами тут трешак начинается. Очень неудобно с ними работать, особенно после jquery виджетов.

К JavaScript'у легко приделывается Java bridge с вызовами желанной библиотеки на c/c++. Конечно, для реал-тайм процессинга audio/video не подходит, а вот для других задач может быть в самый раз.
Спасибо за статью! Knockout и Backbone не очень подходят для больших проектов с кучей pojo и биндингами, а тут кажется дела получше будут.
Не рекомендую использовать google docs ввиду бажности данного продукта. Если хотя бы в одной ячейке много строк, то такой документ в google docs не отображается и его больше нельзя редактировать. По сути, после первой же загрузки данных через ACRA, документ становится нередактируемым. Плюс существует ограничение на количество записей — необходимо сразу интегрировать скрипт для очистки лишних записей.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity