Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Проект: Библиотека GUI для ASP.NET


Автор: mdevils 13.12.2007, 20:57
Я хотел немного рассказать о проекте, который пришел мне в голову, надеюсь на помощь в его реализации.

В настоящее время ASP.NET контролы очень тяжелые и неповоротливые. Будучи очень универсальными они выполняют много лишней работы, хранят очень много лишних данных в ViewState, из которых я, например, использую максимум 10%.
Также скудно обстоят дела с JavaScript. Очень много работы производится на сервере, минимум на клиенте. Серверные контролы слабо поддаются управлению на клиентской стороне. Падает интерактивность сайта.

Идея состоит в том, чтобы разработать библиотеку базовых классов для разработки легких, быстрых и интерактивных компонентов. Суть в том, чтобы:
1. Обойти использование ViewState, а использовать другой, более производительный метод.
2. Создать возможность легкой разработки объектного представления серверного контрола на клиентской стороне и реализовать все возможности для простого взаимодействия контролов на клиенте, который будет не сильно уступать серверному.
3. На основе пункта 2 реализовать AJAX-библиотеку, суть работы которой будет состоять не в обмене HTML-кодов и переправкой огромных ViewState с клиента на сервер, а в отсылке клиентским реализациям контролов только данных! Чтобы они на их основе обновляли свое представление.

Идея еще сырая, надо думать. Кто хотел бы присоединиться?

Автор: tol05 13.12.2007, 23:07
Нда... ну сейчас многие контролами занимаются. Но давайте поконкретнее?

Цитата(mdevils @  13.12.2007,  19:57 Найти цитируемый пост)
Обойти использование ViewState, а использовать другой, более производительный метод

Какой?

Цитата(mdevils @  13.12.2007,  19:57 Найти цитируемый пост)
Создать возможность легкой разработки объектного представления серверного контрола на клиентской стороне и реализовать все возможности для простого взаимодействия контролов на клиенте, который будет не сильно уступать серверному.

"Легкой разработки" и "реализовать все возможности"? Тут с существующими, "допотопными" (с Вашей точки зрения) контролами море проблем, даже когда просто к разным браузерам адаптируешь. Не до того, чтобы "реализовать все возможности". Тем более, что "все возможности" подразумевают активную работу с серверными хранилищами данных... Так что будут проблемы с пунктом 3.

Цитата(mdevils @  13.12.2007,  19:57 Найти цитируемый пост)
На основе пункта 2 реализовать AJAX-библиотеку, суть работы которой будет состоять не в обмене HTML-кодов и переправкой огромных ViewState с клиента на сервер, а в отсылке клиентским реализациям контролов только данных! Чтобы они на их основе обновляли свое представление.

Во-первых, можно и без AJAX-библиотек. Напрямую через скрипты и XMLHttpRequest работать - это ИМХО больше будет соответствовать планам пункта 2.
Ну а во-вторых, ViewState как раз и содержит данные.

Автор: mdevils 13.12.2007, 23:15
Цитата

>> Обойти использование ViewState, а использовать другой, более производительный метод

Какой?


Например, Hidden-поля. Причем по-умолчанию сделать хранение в них открытым текстом, но с возможность выборочно включить шифрование для конфиденциальных данных.
Такой метод даст возможности чтения данных JS-скриптам, что очень важно!

Цитата

Во-первых, можно и без AJAX-библиотек. Напрямую через скрипты и XMLHttpRequest работать - это ИМХО больше будет соответствовать планам пункта 2.
Ну а во-вторых, ViewState как раз и содержит данные.


Я не говорю о готовых AJAX-Библиотеках. Реализовав подобную схему - несложно будет написать свою AJAX-систему без явных недостатков MS AJAX и тп.

Автор: tol05 13.12.2007, 23:28
Замечательно!!! 
А чем ViewState -  не Hidden-поле?!

К тому же открытый текст .... Данные открытым тектстом?! Я правильно понял? Т.е. кто-то там SSL, https разрабатывает, на VPN лицензии покупают, а мы тут все проблемы им решить нашими контролами предложим?!

Я небольшой специалист по веб-хакингу, но думаю это будет просто новый виток карьеры многих и многих поколений этих креативных товарищей.

P.S. А да, просмотрел фразу "но с возможность выборочно включить шифрование"... Т.е. клиент наших контролов (или вообще дэвишка-веб-клиент) должен включать шифрование сам, для каждого контрола по-отдельности (и может быть даже алгоритм шифрования для каждого контрола выбирать)?

Нет. По судам затаскают. smile

Автор: mdevils 14.12.2007, 00:00
Цитата

Замечательно!!! 
А чем ViewState -  не Hidden-поле?!

К тому же открытый текст .... Данные открытым тектстом?! Я правильно понял? Т.е. кто-то там SSL, https разрабатывает, на VPN лицензии покупают, а мы тут все проблемы им решить нашими контролами предложим?!

Я небольшой специалист по веб-хакингу, но думаю это будет просто новый виток карьеры многих и многих поколений этих креативных товарищей.

P.S. А да, просмотрел фразу "но с возможность выборочно включить шифрование"... Т.е. клиент наших контролов (или вообще дэвишка-веб-клиент) должен включать шифрование сам, для каждого контрола по-отдельности (и может быть даже алгоритм шифрования для каждого контрола выбирать)?

Нет. По судам затаскают. smile


ViewState - это Hidden-поле, в котором данные хранятся одним фрагментом, сериализованные и переведенные в Base64. Такие даные невозможно прочитать из JS'а, изменить с помощью JS и тп.
Я говорю о том, что каждое отдельное значение следует хранить в отдельном скрытом поле. Причем каждый контрол сам определяет какие свойства он хранит в открытом виде(и которые будут доступны для JS), а какие данные только серверные и должны быть зашифрованы симметричным методом с переменным(возможно сессионным, тут думать надо) ключем на сервере. Соответственно, шифрованные данные не доступны для JS. А к открытым данным не надо будет применять Base64 и сериализацию. Можно использовать конверторы. Это, возможно, потребует больше усилий для хранения данных на первых этапах, но со временем можно реализовать нужные интерфейсы для наиболее популярных типов. Конверторы работают гораздо быстрее сериализаторов.

Автор: Zakonnic 14.12.2007, 15:44
Ну зачем так с человеком? Он и сам на все грабли наступит, а тут его этими граблями сразу по голове.  smile 

mdevils,  smile  я бы даже к тебе присоединился - люблю велосипеды делать, хобби такое, но времени нет - надо настраивать убийцу моего последнего велосипеда. Потому что мой трехколесный, двигатель барахлит иногда и хорошо работает только одно колесо, пятиугольное, а технология треугольного колеса все еще нуждается в доработке.

В общем библиотека быстрых компонентов - это хорошо. Серьезно. Давай думать.

1. ViewState используется чтобы запоминать состояние контролов, когда оно изменяется программно. Label1.Text="Hello,world!"; -> записалось во ViewState. Опытные погроммисты используют это аккуратно и не раздувают его. Но если надо радикально, убираешь нафиг постбаки - вот и не нужен вьюстейт. Постбаки, как я понял, в твоей модели заменяются аяксом. Одна беда - синхронизация клиента и сервера. Как заставить их "думать об одном и том же" при сохранении "простоты разработки" с помощью таких контролов? Хорошо бы пару идей сюда...

2. Я не представляю, какое может быть взаимодействие контролов на клиенте в HTML. Поэтому во-первых  smile , а во-вторых с этим пунктом пока справляются Flash и уже Silverlight. Последний вообще выполняет свой код (dll) на клиенте. Ээээ... уж не он ли убийца твоего велосипеда?

3. Аякс никогда не отправляет на сервер вьюстейт. Для этого нужен сабмит формы. А чтобы построить html по данным требуется очень серьезный код. Переправка кода может обойтись довольно дорого. Для самопальных контролов без настроек это еще работает, но в общем случае отправить готовый html может быть даже выгоднее. 

Автор: mdevils 14.12.2007, 22:58
Цитата(Zakonnic @ 14.12.2007,  15:44)
Ну зачем так с человеком? Он и сам на все грабли наступит, а тут его этими граблями сразу по голове.  smile 

mdevils,  smile  я бы даже к тебе присоединился - люблю велосипеды делать, хобби такое, но времени нет - надо настраивать убийцу моего последнего велосипеда. Потому что мой трехколесный, двигатель барахлит иногда и хорошо работает только одно колесо, пятиугольное, а технология треугольного колеса все еще нуждается в доработке.

В общем библиотека быстрых компонентов - это хорошо. Серьезно. Давай думать.

1. ViewState используется чтобы запоминать состояние контролов, когда оно изменяется программно. Label1.Text="Hello,world!"; -> записалось во ViewState. Опытные погроммисты используют это аккуратно и не раздувают его. Но если надо радикально, убираешь нафиг постбаки - вот и не нужен вьюстейт. Постбаки, как я понял, в твоей модели заменяются аяксом. Одна беда - синхронизация клиента и сервера. Как заставить их "думать об одном и том же" при сохранении "простоты разработки" с помощью таких контролов? Хорошо бы пару идей сюда...

2. Я не представляю, какое может быть взаимодействие контролов на клиенте в HTML. Поэтому во-первых  smile , а во-вторых с этим пунктом пока справляются Flash и уже Silverlight. Последний вообще выполняет свой код (dll) на клиенте. Ээээ... уж не он ли убийца твоего велосипеда?

3. Аякс никогда не отправляет на сервер вьюстейт. Для этого нужен сабмит формы. А чтобы построить html по данным требуется очень серьезный код. Переправка кода может обойтись довольно дорого. Для самопальных контролов без настроек это еще работает, но в общем случае отправить готовый html может быть даже выгоднее.

1. Постбеки сохраняются в такой модели, но: 
Данные хранятся не во ViewState, а в скрытых полях, что дает JavaScript'у возможность читать их(открытые). + Для ограничения размера таких данных ввести возможности частичного отключения хранения таких данных. Например, в 95% случаев оформление хранить не надо, т.к. оно задается на стадии Init декларативно.

2. Silverlight и Flash пролетают. Есть много статей с критикой. Например, Silverlight и Flash нереально полно индексировать поисковиками, а если они еще и подгружают что-то - то [censored 6]).
Взаимодействие на клиенте подобно взаимодействию на сервере, только без конвейра. Каждый контрол - класс. Он содержит все необходимые методы работы с контролом.
Тут надо учитывать тот момент, что необходимо сохранить функциональность для броузеров без JavaScript. ASP.NET не смогли даже в этом плане до ума довести. Элемент LinkButton не работает без JS. В нем надо было делать наоборот: Обработчик писать в onclick, а href оставить по умолчанию "#", чтобы можно было указать адрес для поисковиков и броузеров без JS. По этим причинам ASP.NET сайты нормально не индексируются, и приходится прикладывать много сил чтобы наладить индексацию.

3. Microsoft AJAX при каждом асинхронном запросе полностью отправляет ViewState на сервер и обратно. Все библиотеки AJAX для .NET работают аналогично.

Автор: mdevils 15.12.2007, 04:04
Также хочется встроить в данную библиотеку DragAndDrop возможности, эффекты.
Такие вещи могут привлечь людей не только функционалом, но и визуальным представлением.

Автор: Zakonnic 17.12.2007, 14:07
Ага. Понятно... что ничего не понятно. :( То есть я конечно могу предположить, что задача сводится к переписыванию System.Web на JS + кучу серверных классов, рулящих потоками JS, но все таки не буду -  smile . Допустим, это уже написано, тогда как будет вести себя приложение с такими контролами? Хотелось бы поподробнее рассмотреть сценарий работы на любом примере.

И еще - как их писать? Если я хочу изменить цвет текста по нажатию кнопки, нужен JS. Сделать это я могу и сейчас. Чем оно будет лучше?

PS. Сильверлайт кстати теоретически можно успешно индексировать - XAML все-таки. И ссылки почти как настоящие smile Думаю, когда распространится, и поисковики к нему приспособятся. Но уж больно похожая там идея.

Автор: Mymik 17.12.2007, 21:55
mdevils, у тебя не получится созвать команду до тех пор, пока ты не начнешь писать хоть что-нибудь сам. Т.е. напиши хотя бы один сложненький контрол, типа GridView пускай у него будет только способность редактировать, вставлять и отображать записи (не нужно там всякие провайдеры подключать). Покажи его достоинства, чем твой GridView лучше другого.
Но словах оно то красиво звучит, но ребята в M$ далеко не дураки, и я совсем не согласен, что asp.net ajax коряво реализован (где-то там вверху видел). А ты пробовал реализовывать его самому ??? ты пробовал управлять событиями, восстанавливать состояние страницы. Ведь это все тоже не так уж и просто.
Да и потом, программисты по своей натуре народ ленивый smile. Так что пример своей работы в студию и только после этого ты сможешь расчитывать на хоть какую-нибудь поддержку со стороны посетителей форума. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)