ASP & MVC

NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

ASP & MVC

Post by NNemo »

I have worked some time with JSP and servlets, and of course followed MVC model.

Now need to do some stuff in ASP, and immediately discover a lot of limitations.
If somebody can share experience, that would be great.

Several questions i have:
1. How to reduce the overall page count? Let's say i have table and would like to browse and edit it. Then i must have browse page and one page for every operation like insert and update.

2. ASP does not allow put objects in Response. Is it good to put them in session?
I worry about performance, threading issues and so on.

3. I don't know how to determine if the session was reinstantiated. I need to track that issue. The only way i know is to check it for some object existence. If object is nothing, then session is new.

4. Is there any way to do something in object oriented style? I have to deal with plain ASP, no business objects written in C or VB or any other language. I guess i can create object in ASP, i would like to call it form other page. Seems like Server.Execute allows me to call another page, but that will lead to excessive amount of pages.

It's more architectural then programming questions. Just wondering how people do it right now. I din't use ASP for a long time and now need refresh everything.
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Post by NNemo »

Расскажу как я делаю. Для затравки.

1. Для каждой области (например для работы с одной таблице) пишется одна страничка, которая выполняет роль контроллера. Все запросы идут через нее, она определяет какую акцию выполнить и тренсферит запрос в другую страничку. Перед трансфером, обработанные данные сохраняются в сессии.
Для каждой процессинговой формы имеется своя акция. Таких несколько: browse, inserе, update, delete. Данные обрабатываются контроллером, все остальные странички, только показыват результат. В крайнем случае на них может быть клиентский скрипт. Все состояние приложения, такой как статус менюшек и контролов, хранится в сессии. Менюха в отдельном инклуде просто вставляется там где нужно. Она себя в зависимости от состояния, сохраненного в сессии, обрабатывает. Получается унифицрованно и кодируется только в одном месте.

2. Данные храняться в сессии и это гемморойно. Нужно их постоянно чистить, так как объекты не освобождаются пока на них есть ссылки. Думаю не собрать ли их в Dictionary и грохать только его? Ну почему нет возможности хранить объект, только во время обработки запроса?

3. Попрежнему не решил, стоит ли юзать куцые объектные возможности ASP.
Разделил функциональность по уровням и раскидал ее по отдельным includ'am. Представление таким образом вообще не общается с базой, все спятанов в бизнес слое. Это конечно все еще далеко от того, что предлагает делать MS, но кроме ASP ничего юзать нельзя.

Может кто предложить, что-нибуть более продвинутое? А если кто так делает, интересно знать какие грабли бывают. Меня несколько напрягает тот факт, что все сделано на скриптах. Производительность наверное будет не лучшая.

Еще как всегда вопрос - кто как делает пейджинг данных? Фильтры?
Работал ли кто с XML и Data Binding. На примерах то оно красиво, а как на практике сложно сказать.
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Post by katit »

Для затравки надо уточнить про что речь. ASP или ASP.NET?
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Post by NNemo »

Plain, old ASP
Lightik
Уже с Приветом
Posts: 1165
Joined: 03 Jul 2002 20:43
Location: AU

Re: ASP & MVC

Post by Lightik »

NNemo wrote:1. How to reduce the overall page count? Let's say i have table and would like to browse and edit it. Then i must have browse page and one page for every operation like insert and update.

1. Уменьшить количество страниц существенно без усложнения приложения нельзя. Печальный факт. Ну можете обработку всех действий объединить на одной странице, передавая идентификатор действия в хидден поле типа action="insert".
NNemo wrote:2. ASP does not allow put objects in Response. Is it good to put them in session?
I worry about performance, threading issues and so on.

2. В Сессиии хранить стоит только идентификатор сессии, все остальное - избегать. Данные не стоит хранить в сессии. Плохо сказывается на perfomance and scalability. Тем более объекты. Для передачи данных от страницы к странице используйте хидден поля формы. Кстати, а какие объекты вы хотите хранить в сессии? Для доступа к БД используется пулинг (включить надо, если вдруг нет), а значит один из наилучших вариантов хранить ADOString переменную, хоть на уровне апликейшена, и RS.Open sql, ADOString откроется гораздо быстрее, чем с глобальным коннекшеном на странице (при присвоении строки коннекшена выбирается из пула свободный коннекшен соответсвующий заданной строке коннекшена). Execute команду коннекшена таким образом не используешь, но вместо можно использовать Command объект.
NNemo wrote:3. I don't know how to determine if the session was reinstantiated. I need to track that issue. The only way i know is to check it for some object existence. If object is nothing, then session is new.

3.Гм... Вопрос не вполне понятен. Думаю ответ где-то в описании объеката Session и обработке событий Session_OnStart, Session_OnEnd в global.asa.
NNemo wrote:4. Is there any way to do something in object oriented style? I have to deal with plain ASP, no business objects written in C or VB or any other language. I guess i can create object in ASP, i would like to call it form other page. Seems like Server.Execute allows me to call another page, but that will lead to excessive amount of pages.

4. Всю функциональность тоже выношу в отдельные инклюды, как NNemo. чтобы отделить бизнес-логику хоть сколько-нибудь. Объектный стиль оставим для ASP.NET

для NNemo
И по поводу XML - мне приходилось использовать его в основном для того чтобы наложить XSL файл с форматированием на XML, сформированный in memory из данных, полученных из файла либо из БД - работает неплохо, но конечно следует помнить от чувствительности DOM модели к объему данных.

Ну и по поводу пейжинга - хоть конкурс проводи, кто предложит наиболее красивое решение :) Все через RS.PageSize, PageCount, и так далее, ничего революционного. Вот через XML можете красиво организовать, тогда в XML заносите данные только одной страницы, а XSL форматирует их, даже с номерами страниц при желании.
Не сиди, сложа руки... Сегодня первый день из тех, что тебе остались!
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Re: ASP & MVC

Post by NNemo »

Lightik wrote:
NNemo wrote:1. How to reduce the overall page count? Let's say i have table and would like to browse and edit it. Then i must have browse page and one page for every operation like insert and update.

1. Уменьшить количество страниц существенно без усложнения приложения нельзя. Печальный факт. Ну можете обработку всех действий объединить на одной странице, передавая идентификатор действия в хидден поле типа action="insert".
NNemo wrote:2. ASP does not allow put objects in Response. Is it good to put them in session?
I worry about performance, threading issues and so on.

2. В Сессиии хранить стоит только идентификатор сессии, все остальное - избегать. Данные не стоит хранить в сессии. Плохо сказывается на perfomance and scalability. Тем более объекты. Для передачи данных от страницы к странице используйте хидден поля формы. Кстати, а какие объекты вы хотите хранить в сессии? Для доступа к БД используется пулинг (включить надо, если вдруг нет), а значит один из наилучших вариантов хранить ADOString переменную, хоть на уровне апликейшена, и RS.Open sql, ADOString откроется гораздо быстрее, чем с глобальным коннекшеном на странице (при присвоении строки коннекшена выбирается из пула свободный коннекшен соответсвующий заданной строке коннекшена). Execute команду коннекшена таким образом не используешь, но вместо можно использовать Command объект.
NNemo wrote:3. I don't know how to determine if the session was reinstantiated. I need to track that issue. The only way i know is to check it for some object existence. If object is nothing, then session is new.

3.Гм... Вопрос не вполне понятен. Думаю ответ где-то в описании объеката Session и обработке событий Session_OnStart, Session_OnEnd в global.asa.
NNemo wrote:4. Is there any way to do something in object oriented style? I have to deal with plain ASP, no business objects written in C or VB or any other language. I guess i can create object in ASP, i would like to call it form other page. Seems like Server.Execute allows me to call another page, but that will lead to excessive amount of pages.

4. Всю функциональность тоже выношу в отдельные инклюды, как NNemo. чтобы отделить бизнес-логику хоть сколько-нибудь. Объектный стиль оставим для ASP.NET

для NNemo
И по поводу XML - мне приходилось использовать его в основном для того чтобы наложить XSL файл с форматированием на XML, сформированный in memory из данных, полученных из файла либо из БД - работает неплохо, но конечно следует помнить от чувствительности DOM модели к объему данных.

Ну и по поводу пейжинга - хоть конкурс проводи, кто предложит наиболее красивое решение :) Все через RS.PageSize, PageCount, и так далее, ничего революционного. Вот через XML можете красиво организовать, тогда в XML заносите данные только одной страницы, а XSL форматирует их, даже с номерами страниц при желании.


В том то и дело что нет у меня форм, в большинстве случаев, обработка выполняется на сервере. Какие там могут быть формы? Или мы говорим о scripting model из VS Interdev?
Объект Server вызывает методы из другой странички через метод transafer. Нет дополнительного похода на клиент. Одна засада - данные можно передать только через Session. Это меня и напрягает, так как передавать приходится объекты типа рекордсетов и т.п. Для клиента это выглядит так, как будто он работает все время с одной страничкой.

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

Давно когда-то, я писал все на скрипте и DHTML юзался для построения странички уже прямо на клиенте. Т.е сервер выдавал рекордсеты в виде XML, а клиент сам с ними разбирался. Но геммороя было очень много.
Борланд что-то подобное делает в InternetExpress.
blanko27
Уже с Приветом
Posts: 2264
Joined: 17 Jun 2003 04:41
Location: Just like US

Post by blanko27 »

NNemo wrote:...
3. Попрежнему не решил, стоит ли юзать куцые объектные возможности ASP. ... Это конечно все еще далеко от того, что предлагает делать MS, но кроме ASP ничего юзать нельзя.
...
Т.е. ActiveX-ы вам использовать совсем нельзя?
...а мы такой компанией, возьмем, да и припремся к Элис!
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Post by NNemo »

I haven't licensed tools to create them.
blanko27
Уже с Приветом
Posts: 2264
Joined: 17 Jun 2003 04:41
Location: Just like US

Post by blanko27 »

Плохо, ASP без ActiveX это тоже самое, что JSP голимый. :?
...а мы такой компанией, возьмем, да и припремся к Элис!
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Post by NNemo »

One don't need any additional tools in JSP, because it's java by nature.
blanko27
Уже с Приветом
Posts: 2264
Joined: 17 Jun 2003 04:41
Location: Just like US

Post by blanko27 »

Поясните, пожалуйста, свою мысль. Что значит "it's java by nature"? Это, оффтопик, но если можно? :?
...а мы такой компанией, возьмем, да и припремся к Элис!
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Post by NNemo »

А что тут пояснять? :D
Все что пишется внутри JSP - пишется на жабе.
Есть виртуальная машина и компилятор, чего же еще?
Не нужно отдельного VC/VB или еще чего для того чтобы создать ActiveX/COM объект.
Можно конечно и в ASP написать класс, но меня скорее всего стошнит от этого...
blanko27
Уже с Приветом
Posts: 2264
Joined: 17 Jun 2003 04:41
Location: Just like US

Post by blanko27 »

NNemo wrote:...
Все что пишется внутри JSP - пишется на жабе.
Есть виртуальная машина и компилятор, чего же еще?
...
Я всегда считал, JSP скриптовым интерпретируемым языком наподобие PHP или ASP, немногого стоящим без JavaBeans. Выходит я ошибался? Т.е. в JSP можно внедрять (embed) чистую Java со всей поддержкой классов, наследования, интерфейсов и т.п, что ставит его в один ряд с ASP.NET? Я что-то не очень уверен, что правильно понимаю вас. :?
...а мы такой компанией, возьмем, да и припремся к Элис!
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Post by NNemo »

Честно сказать до такого изврата не доходил, но думаю что принципиальных ограничений нет. Сама JSP страничка является расширением одного из классов имплементации сервлета, так что наследование как минимум там имеется. :D Ничего не мешает мне перекрыть этот класс и наследоваться от него. Далее, JSP это по сути дела препроцессор, выдающий на выходе код сервлета, который компилируется и выполняется как обычный класс. Соответственно и все остальные навороты там имеются.

До появления ASP.NET, JSP был (да и есть) намного круче чем ASP.
Что там такого есть в ASP.NET чего нельзя сделать на JSP?
А вот в ASP.NET можно ли сохранить объект, только на время выполнения странички, не заморачиваясь с его освобождением? Вызвать другую страничку, обработать этот объект? Я понимаю что с появлением полноценных классов, это не так уже необходимо, но в ASP это серьезно отравляет жизнь.

Return to “Вопросы и новости IT”