• Как организовать динамический wizard (мастер установки) на сайте?

    @Quilin
    Full-stack разработчик
    По сути своей, мастер - это очень здоровая форма. А есть одна штука, которую люди жутко ненавидят в больших формах - когда введенные ими данные оттуда пропадают. Случайно закрыл вкладку или еще что-то такое. У меня в проекте есть два мастера - мастер оплаты и мастер создания одного ключевого бизнес-объекта. В первом случае очень важно сохранить все данные на всех шагах, чтобы потом позволить пользователю вернуться и завершить оплату, во втором случае это не так критично.
    Поэтому мастер оплаты работает аж с базой данных, стараясь по максимуму запомнить, что вводит пользователь, а второй мастер работает как одна большая форма. Впрочем, он общается с сервером, который подкладывает следующие шаги через ajax, если заполнение текущего как-то на это способно повлиять.

    Я все это к тому, что надо исходить не из общей практики и представлений об удобстве написания кода - а из конкретных особенностей вашего мастера: требований к безопасности, отказоустойчивости и прочих факторов.
    Ответ написан
    Комментировать
  • Регистрация зависимостей из других сборок в CastleWindsor?

    @Quilin Автор вопроса
    Full-stack разработчик
    Решил проблему через xml-файл с настройками топологии. Так или иначе, пришлось привязать каждый сервис к своему порту, ну и еще несколько мелочей описать для каждого сервиса. Заодно решил хранить в этом файле название сборки. Теперь на старте приложения просто читаю из файла эти AssemblyNames, а дальше все делаю так же.
    Ответ написан
    Комментировать
  • Как средствами JavaScript реализовать фоновое событие на всех страницах сайта?

    @Quilin
    Full-stack разработчик
    Я бы советовал на событии onLoad (аналог jquery document.ready) вешать что-то вроде:

    $(function () {
        var YMEventHandler = (function () {
            var _timerDelta = 100,
                 _timerCookieName = "___TimerYM___"
                 _timerElapse = 2 * 60 * 1000, // two minutes
            _timer = setInterval(function () {
                 var timerValue = parseInt(_getTimerValue()) || 0;
                 timerValue += _timerDelta;
                 _setTimerValue(timerValue);
                 if (timerValue >= _timerElapse) {
                     clearInterval(_timer);
                     // вызов того, что нужно было вызвать!!!
                 }
            }, _timerDelta);
    
            function _getTimerValue() {
                 return _getCookie(_timerCookieName);
            };
    
            function _setTimerValue(value) {
                 _setCookie(_timerCookieName, value);
            };
    
            function _getCookie(name) {
                var matches = document.cookie.match(new RegExp("(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"));
                return matches ? decodeURIComponent(matches[1]) : undefined;
            };
    
            function _setCookie(name, value) {
                document.cookie = name + "=" + value;
            };
    
        })();
    });


    Это достаточно топорно, но работать вроде бы должно.
    Ответ написан
  • Как лучше всего изучить новый большой проект без wiki?

    @Quilin
    Full-stack разработчик
    Да, есть такое средство - найди того, кто писал, посади рядом с собой и пиши код. Это немного похоже на парное программирование, только надо при этом надеть на голову велосипедный шлем или шлем для мотоцикла.
    Ответ написан
    2 комментария
  • Разделитель дробных чисел в ASP.MVC 3?

    @Quilin
    Full-stack разработчик

    Проблема с культурой кажется очень надуманной. Она строится на устаревшем забугорном принципе писать длинные числа с разделителем в виде пробела. Например:

    1,000,000.02 - миллион с копейками Но серьезно, кто при заполнении форм так делает? Если же речь о формировании URI - наверное, не самая удачная идея как-то связывать внешний вид параметров с культурой.

    У себя в проектах один раз написал ModelBinder для decimal и decimal?, в котором запятые обращаются в точки. Возможно, это не самое элегантное решение на планете, но для дробных чисел оно выглядит вполне адекватным. Этакое забивание гвоздей отверткой заместо микроскопа.

    Ответ написан
    Комментировать