в

Kazan Dev Alliance

Казанское Сообщество Разработчиков Программного Обеспечения

Персональный блог Александра Шера

Professional blog for .Net programmers. Main topics: Microsoft ASP.NET AJAX, WPF/E, OOP, Refactoring

March 2007 - Posts

  • IEDevBar beta 3

    Несколько недель назад поставил себе очередную версию IEDevBar, на сей раз beta 3:
    http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en
    Должен сказать, что глюков стало значительно меньше. Кроме того, убрали дубирование панелей, добавилась кнопка "Select Element By Click" и "View Element Source", так что теперь не надо за ними лазить в меню.

    Для тех кто не в курсе. IEDevBar - это примочка к MSIE, которая позволяет смотреть DOM-дерево открытой страницы. Главный её плюс в том, что она показывает дерево в его актуальном состоянии, с учетом всех сделанных скриптами изменений.

    Posted Mar 30 2007, 01:00 PM by Aib with 7 comment(s)
    Теги:
  • Не-AJAX'овое назначение Microsoft ASP.NET AJAX

    Интересно, что при всей пропаганде этой технологии, мало кто знает, что кроме AJAX-надстройки, совместимой с концепцией контролов ASP.NET, в сборку System.Web.Extensions входят контролы и интерфейсы, которые вообще никакого отношения к AJAX не имеют (более того - могут работать без добавления на страницу ScriptManager). То же самое касается и клиентских скриптов - лишь небольшая их часть посвещена AJAX. Для чего же нужно всё остальное?

    Одна из проблем, с которыми сталкивались практически все, кто писал клиентский фунционал к серверным контролам - это необходимость передавать в скриптовые функции ClientId контролов. Захардкодить их в скрипты нельзя, передавать в качестве глобальных переменных тоже. Самыми распространенными вариантами были:

    1. Передавать все ClientId в качестве аргументов функций. Неприятность здесь в том, что для некоторых функций число параметров может перевалить за полсотни. Работать с ними достаточно сложно, особенно в условиях отсутствия строгой типизации и интеллисенса в js (Orcas CTP - не в счет :)).
    2. Зачастую нежелание передавать огромное число параметров в качестве аргументов приводит к ещё более ужасному решению. Скрипт заносят в строковую переменную, а затем создают для каждого экземпляра контрола уникальную копию с правильными ClientId. То, что размер скрипта вырастает до невообразимых размеров, ещё пол беды. В таком скрипте совершенно невозможно разобраться. На свет появляется скрипт, весь состоящий из подобных кусков: [code language="JScript"]{22}.{13}=function(){{{3}.{17}.parent = {8}}}[/code]

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

    Большинство двелоперов в итоге оказываются "погребены" под всем этим кодом, и внесение любых даже незначительных изменений проходит с большим трудом.

    Те, кто посмекалистее, рано или поздно приходят к тому, что клиентский код должен быть своего рода "отражением" серверного, в том смысле что для каждого серверного контрола должен быть создан клиентский класс с соответствующими серверным полями. Тогда передавать ClientId нужно бутет только в одном месте - при инициализации объекта. Кроме того, процесс передачи можно автоматизировать в базовом контроле, и затем просто наследовать от него свои собственные.

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

    К нашему счастью, всё это уже сделано. Microsoft AJAX Library (так именуется клиентская часть Microsoft ASP.NET AJAX) привнесла в яваскрипт огромное количество расширений, в результате чего стало возможно создавать классы с нормальным наследованием, делать проверку типов, порождать полноценные события, регистрировать пространство имен, и, как результат, создавать своего рода клиентские контролы. А в System.Web.Extensions есть набор классов и интерфейсов, которые позволяют легко связывать эти клиетские контролы с серверными образами.

    Каковы же плюсы и минусы? На мой взгляд, главный плюс состоит в том, что клиентский код начинает разделять идеологию серверного. Все имена типов и полей классов могут быть в точности повторены на клиенте, что значительно облегчает понимание кода и не требует постоянного переключения мышления с объектно-ориентрованного подхода на процедурный и обратно. Кроме того, теперь весь яваскриптовый код может быть сосредоточен исключительно в .js-файлах. И никаких RegisterScript. А минусы... лично я для себя минусов не нашел. Если кто найдет - сообщите.

    Таким образом, если даже вы не собираетесь внедрять AJAX в своё приложение (а на это может быть масса весомых причин), но вам может потребоваться js-функциональность, рекомендую использовать Microsoft ASP.NET AJAX. Времени на освоение этой технологии уйдет немного, зато в последствии она сэкономит вам кучу нервов и времени.

    P.S. На последок пара ссылок по теме:
    http://ajax.asp.net/docs/tutorials/ExtenderControlTutorial1.aspx
    http://ajax.asp.net/docs/tutorials/IScriptControlTutorial1.aspx

     

  • Начало

    Привествую всех в своем блоге, который я наконец-то решил открыть.

    Сперва представлюсь. Меня зовут Александр Шер. Nickname: Aib (для тех кто не очень дружит с английским - мой никнэйм читается как "эйб"). Как не трудно догадаться, я - программист. Специализируюсь, в основном, на алгоритмах, пользовательских интерфейсах и различных "сложных случаях". Пишу на си-шарп и сопутствующих скриптовых языках.

    Теперь немного о блоге. Изначально идея была посвятить его ASP.NET AJAX и WPF/E. Видимо, ближайшее время так и будет. В любом случае, это будет блог о программировании по интересующим меня темам с небольшим оффтопом 8). Поскольку я себя к сверх крутым специалистам не причисляю (статус MVP в ближайшее время мне не грозит :) ), материал здесь будет рассчитан на аудиторию уровня среднего синиор-девелопера и ниже :).

    В любом случае, буду рад видеть всех в своем блоге и надеюсь, что то, что я буду здесь писать, будет интересно не только мне.

    До встречи,

    С уважением, Aib.

© 2007 Kazan Developers Community and Post`s Authors