Стиль программирования в ASP.NET

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Стиль программирования в ASP.NET

Сообщение MIT » 03.01.2010 (Вс) 23:43

ASP.NET предоставляет довольно большое количество готовых контролов, предназначенных для рендеринга данных на страницу, с довольно богатым функционалом, а также средств для самостоятельного "производства" таких контролов. Всё это хорошо, удобно, но меня интересует такой вопрос: насколько некорректно писать приложение ASP.NET в классическом стиле - в стиле самостоятельного формирования конечной разметки?

Допустим, у нас есть простенькая страничка, которую надо динамически наполнить содержимым:
Код: Выделить всё
<div id="somediv" runat="server">

</div>

Если не брать в расчет довольно сложные контролы типа календарей и TreeView`ов, создание аналогов которых обычно глупо по части затраты времени, то чем хуже (и хуже ли) использование конструкций
Код: Выделить всё
dim html as new stringbuilder
html.appendFormat("<a href=""{0}"" title=""{1}"">{1}</a>", SomeObject.Link, SomeObject.Description)
somediv.innerHtml = html.Tostring
или
Код: Выделить всё
somediv.Controls.Add(New literalControl(String.Format("<a href=""{0}"" title=""{1}"">{1}</a>", SomeObject.Link, SomeObject.Description)))
стандартной схемы с созданием LinkButton`а?

Понятное дело, что подобную технику в некоторых случаях применять не удобно и не приемлимо, поэтому хочется поднять не вопрос целесообразности, а вопрос соответсвия идеологии.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Стиль программирования в ASP.NET

Сообщение FaKk2 » 04.01.2010 (Пн) 5:05

Оба варианта страдают одним и тем же недостатком. Оба смешивают слои бизнес-логики и презентации. Что ты будешь делать, когда через пару месяцев тебе надо будет добавить, например, стиль к твоей ссылке, компилировать заново?
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Стиль программирования в ASP.NET

Сообщение Roman Koff » 04.01.2010 (Пн) 10:28

Это противоречит идеологии ASP.NET. Самая существенная разница между ASP и ASP.NET - это какраз уход от явной сборки кода клиентской страницы.
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Стиль программирования в ASP.NET

Сообщение MIT » 04.01.2010 (Пн) 14:35

FaKk2 писал(а):Что ты будешь делать, когда через пару месяцев тебе надо будет добавить, например, стиль к твоей ссылке, компилировать заново?
Я с тобой согласен, если речь идет о странице, элементы которых заранее размещены на странице. В этом случае, действительно, удобнее разместить контрол и задать его параметры кодом, а тот же стиль легко менять просто правкой aspx-файла.
Но я не зря выделил фразу о динамическом формировании контента страницы, когда заранее неизвестно ни количество элементов, ни вообще факт их наличия.

Возьмем пример. У нас есть база по отстроенным в каком-нибудь городе зданиям. Одна из страниц сайта отображает общую информацию о строении (начало строительста, окончание, количество квартир, информация о фирме-строителе и т.д.) и краткую информацию о каждой купленной квартире. Т.е. получается, что станица состоит из двух частей: с основной информацией и с таблицей произвольного вида, содержащей данные по купленным кватирам.

Вполне понятно, что предугадать количетсво "строк" нашей импровизированной таблицы заранее невозможно, поэтому страницу можно сделать следующим образом:
Код: Выделить всё
<div id="content">
  <div id="HouseInfo" runat="server">
    тут заранее подготовленные, например, Label`ы или TextBox`ы для вывода информации и ссылка на сайт строительной компании
  </div>
  <div id="FlatsInfo" runat="server">
    а здесь будет помещена нформация о квартирах
  </div>
</div>
Ничего сложного.
С заполнением данный о доме проблем не будет, а вот по поводу информации о квартирах как раз и интересно узнать.

Создавать контент мы будем циклом:
Код: Выделить всё
For each flat as FlatInfo in House.Flats

Next
но способов заполнения, опять же, несколько:
- использовать аккамулятор кода (StringBuilder), потом присвоение его значения к InnerHTML контейнера
- использование LiteralControl`ов для создания начала таблицы(table,thead,tr,...,/tr,/thead,tbody), ее строк (tr,...,/tr) и конца таблицы (/tbody,/table)
- а можно использовать объект Table и огромное количество объектов TableRow, TableCell, LinkButton, Label и т.д.

Возвращаясь к стилям следует заметить, что в любом из этих случаев, будь то присвоение стиля в шаблоне для LiteralControl`а или изменение свойства .CssClass у какого-либо объекта, правкой разметки из .aspx не обойтись.

Третий способ удобен, если не знаешь что писать в первых двух (если не знаешь HTML, понятия не имеешь что такое стандарты вообще, что такое этот ваш XHTML). А как по мне, так создание огромного количества объетов-элементов таблицы может разве что, пусть и не значительно, снизить производительность, ведь каждый объект занимает место в памяти, у каждого вызывается процедура рендера, а тут все готово: уже готовый кусок полностью устраивающего пользователя кода, который просто надо вставить в определенный момент в определенное место страницы.


Roman Koff писал(а):Это противоречит идеологии ASP.NET. Самая существенная разница между ASP и ASP.NET - это какраз уход от явной сборки кода клиентской страницы.
Опять же соглашусь: в ASP.NET очень удобно пользоваться контролами и создавать свои, но в чем смысл использования в вышеописанном случае именно контролов?


По поводу этого примера. Вообще можно было бы использовать что-то типа DetailesView`а, но его функционал не всегда достаточен. Например, для смены класса определенной ссылки (а не каждой аналогичной ей) придется все равно менять код: либо насильно приписывать определенному элементу ссылку (а при использовании шаблонов в таких контролах получить доступ к определенным элементам затруднительно), либо применяя правила наследования в CSS менять класс определенной "строке" контрола, что бы ссылки .standart a.more_info и .non-standart a.more_info отличались.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Стиль программирования в ASP.NET

Сообщение Roman Koff » 04.01.2010 (Пн) 17:47

По существу вопроса: и тот и другой подход будет абсолютно корректным, но идеологически правильно работать с контролами.
Невероятно, чтобы возникла ситуация, когда от классической сборки кода страницы на лету отказались бы, ведь в некоторых случаях при ручном создании контрола это, на самом деле, и происходит.
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Стиль программирования в ASP.NET

Сообщение FaKk2 » 04.01.2010 (Пн) 20:24

Идеологически правильным способом заполнения данных является databinding. Контейнеров для этого уйма. Тебе скорее всего подойдет ListView (который появился в фреймворке 3.5).
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Стиль программирования в ASP.NET

Сообщение VVitafresh » 04.01.2010 (Пн) 21:15

FaKk2 писал(а):Идеологически правильным способом заполнения данных является databinding.

Не знаю какой подход правильный, но подход с databinding мне очень нравится. Удобно ведь!
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Стиль программирования в ASP.NET

Сообщение MIT » 04.01.2010 (Пн) 23:07

FaKk2 писал(а):который появился в фреймворке 3.5
Версию 3.5 пока не использую (ибо особой надобности в ней не вижу).

В общем и целом всё ясно: приоритет остается за использованием контролов, однако при необходимости можно использовать и описанные мной выше методы.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Стиль программирования в ASP.NET

Сообщение FaKk2 » 05.01.2010 (Вт) 2:08

MIT писал(а):
FaKk2 писал(а):который появился в фреймворке 3.5
Версию 3.5 пока не использую (ибо особой надобности в ней не вижу).

В общем и целом всё ясно: приоритет остается за использованием контролов, однако при необходимости можно использовать и описанные мной выше методы.


Дело конечно не моё, но почему нет? Апгрейд до 3.5 практически абсолютно безболезненный.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Стиль программирования в ASP.NET

Сообщение MIT » 05.01.2010 (Вт) 2:18

FaKk2 писал(а):почему нет?
Просто потому что я не испытываю особых сложностей в использовании второй версии: мне достаточно функционала (а большая его часть вообще остается мной не задействованной), я не знаю того, что есть в версии 3.5 и чего жизнено не хватает в версии 2.
В переходе с 1 и 1.1 на 2 была масса плюсов - первые версии достаточно поверхностно сделаны, имели большое количество недоработок и ошибок.

Да, в 3.5 добавлено огромное количество свистелок (касательно ASP.NET появилось больше AJAX функционала), но необходимость в них сомнительна.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Стиль программирования в ASP.NET

Сообщение FaKk2 » 05.01.2010 (Вт) 2:29

Ну вот ListView замечательный контрол. Комбинирует функционал GridView из второго фреймворка с гибкостью Repeater'а.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Стиль программирования в ASP.NET

Сообщение FaKk2 » 06.01.2010 (Ср) 1:41

Или вот System.Xml.Linq очень удобен. XElement, ХDocument и XAttribute очень сильно облегчают работу с XML. А уж вкупе с самим LINQ'ом, так вообще сказка.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Стиль программирования в ASP.NET

Сообщение MIT » 20.01.2010 (Ср) 0:44

Хотел поинтересоваться: почему в некоторых местах реализация определенных механизмов ASP.NET заранее не рациональна?
Сейчас пишу провайдеры членства и ролей и у меня вызывает некоторое недоумение, почему все манипуляции происходят со строками, когда можно использовать индексы? Понятно, что для разнообразных поисков нужны строки, но зачем для функций внутреннего обращения типа IsUserInRole использовать строки как для идентификации пользователя, так и для идентицикации роли? Ведь куда как проще сделать один запрос в одну таблицу с использованием индексов, чем сделать запрос идентификатора по строке в таблицу пользователей, затем аналогичным образом узнать идентификатор роли, и только потом сделать единственный нужный конечный запрос.
Или они предлагают всё хранить в виде строк? Это же идиотизм.


З.Ы. Попробовал 3.5. Вроде ничего так, и ЛистВью - действительно хорошая штука.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Стиль программирования в ASP.NET

Сообщение MIT » 02.02.2010 (Вт) 16:17

Возвращаясь к теме предыдущего поста.

Я лично считаю, что организованная система членства (этот ваш MembershipProvider) чуть более чем на половину идиотская: нерациональная, неотпимальная, неудобная и неполная. Собственно, хочется написать свой собственный класс (отвязанный от стандартной системы), но возникает вопрос: а не упустил ли я из виду что-нибудь важное? Может стандартная система членства мега-гениальна, а я этого не замечаю?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Стиль программирования в ASP.NET

Сообщение VVitafresh » 02.02.2010 (Вт) 18:50

MIT писал(а):Я лично считаю, что организованная система членства (этот ваш MembershipProvider) чуть более чем на половину идиотская: нерациональная, неотпимальная, неудобная и неполная. Собственно, хочется написать свой собственный класс (отвязанный от стандартной системы), но возникает вопрос: а не упустил ли я из виду что-нибудь важное? Может стандартная система членства мега-гениальна, а я этого не замечаю?

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

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Стиль программирования в ASP.NET

Сообщение MIT » 02.02.2010 (Вт) 20:13

Самое главное, что я считаю недостатком — это оперирование строками. Нафига, спрашивается? Это нерационально; учитывая то, что все данные в базе хранятся и индексируются по идентификаторам, приходится совершать уйму никому не нужных действий.
Дальше — использование providerUserKey вместо нормального идентификатора. И то только в двух с половиной функциях.
Не хватает работы с идентификаторами. Все (большинство) функций можно и нужно переписать на работу с идентификаторами.
Следующее — нет контроля ошибок. Из провайдера невозможно передать код ошибки (единственное исключение — CreateUser, параметр status), а это довольно полезная штука, например при авторизации.

По мелочи:
- Не понятно зачем в функции GetUser имеется параметр userIsOnline. Его можно игнорировать, но он же бессмысленен: если мне надо получить пользователя с идентификатором 318, то что, если он "не в сети", то функция вернет Nothing? Совместно с отсутсвием контроля ошибок не понятся природа этого Nothing: то ли идентификатор (имя) неверное, то ли ошибка подключения к базе, то ли этот гнусный userIsOnline, то ли инопланетяне, то ли еще что.
- Невозможность расширения в рамках совместимости с прототипом. Что делать, если я захочу приделать к свойствам пользователя номер мобильника? Да, можно унаследовать MembershipUser, дописать его, но ведь постоянное кастование MembershipUser`а к нормальному типу радости не доставит.
- Есть функция UnlockUser. Куда делась LockUser?
- UpdateUser - феерическая тупость. Как совместить использование возможностей дописанного мной MembershipUser в рамках кастования MembershipUser`а к моему типу? А если передали не мой тип пользователя а стандартный? Откуда тогда взять необходимую информацию?
Нет, можно, конечно, ставить кучу условий (мол, приводить к типу или нет), можно забить на совместимость и всегда приводить к своему типу, но это же пипец: в первом случае получается инвалидная запись, в ней могут потерятся данные; во втором - возникает вопрос: а если забить на совместимость, то нафиг нужен MembershipProvider вообще?
- ResetPassword возвращает строку. Но ведь может произойти стопицот ошибок и что, для всех этих случаев возвращать Nothing? А если мне срочно надо сообщить вызывающему коду, что сейчас сервер взорвется и надо данные перекидывать на FTP другого сервера? Чем тогда срочный Nothing будет отличим от Nothing`а, порожденного, например, несоответвием answer`а данным из базы?
- Где функции контроля валидности почты, имени пользователя, пароля?

Аналогично для ролей. Хотя там нескольку лучше и можно сделать альтернативу стандартному набору функций при сохранении общей работоспособности.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Стиль программирования в ASP.NET

Сообщение VVitafresh » 02.02.2010 (Вт) 21:29

Да, MIT, вижу у тебя наболело :)

По сути вопросов ничего не скажу, т.к. пользовался лишь базовыми ф-иями MembershipProvider'а и мне их хватало. Видел обсуждение самопального средства администрирования на sql.ru (с исходниками) -- вот ссылка: http://sql.ru/forum/actualthread.aspx?tid=693869
Может почерпнешь что-то для себя. Правда там тема флеймовая вышла и ее закрыли.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Стиль программирования в ASP.NET

Сообщение FaKk2 » 02.02.2010 (Вт) 21:40

Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Стиль программирования в ASP.NET

Сообщение VVitafresh » 02.02.2010 (Вт) 22:12

MIT писал(а):Что делать, если я захочу приделать к свойствам пользователя номер мобильника?

Ты, кстати, смотрел в сторону Profile?
Управление пользователями Интернета с помощью пользовательских поставщиков профилей
Integrating Customized Roles, Membership and Profiles in ASP.NET 2.0
Profiles In ASP.NET 2.0
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 65

    TopList