ASP.Net код позади дизайн - PullRequest
       3

ASP.Net код позади дизайн

2 голосов
/ 13 декабря 2010

Я создаю небольшое приложение asp.net, которое содержит несколько страниц .aspx.Я не уверен в том, как спроектировать свой код (c #).

Пример: Позвольте мне иметь веб-страницу, которая загружает книги из БД и помещает их имена в список HTML,Мой код должен: 1)

  1. Получить данные о книгах из БД.
  2. Создать список HTML
  3. Поместить список в исходный код страницы.

Один простой способ, который я нашел, заключается в следующем:

  1. Класс для загрузки данных из БД и форматирования
  2. Класс HtmlFactory, создающий строку HTML изobjects
  3. Простая привязка свойств для размещения сгенерированного HTML-кода внутри страницы

Я полагаю, что есть более чистые способы сделать это.Я знаю о MVC, но я думаю, что есть больше моделей для разработки кода.

Пожалуйста, опишите способ использования выше или ссылку на соответствующие данные.

Ответы [ 2 ]

2 голосов
/ 13 декабря 2010

ASP.Net поставляется с рядом элементов управления, которые облегчают работу с данными. Для примера, который вы предоставили, я хотел бы изучить использование элемента управления Repeater, чтобы легко связать список книг, которые вы получаете из базы данных, со своей страницей. Другие элементы управления Databound включают в себя:

  • GridView
  • ListView
  • DetailsView
  • FormView
  • DataList

Все это позволяет легко привязать ваши данные к вашей странице.

Лучшее состоит в том, чтобы наложить свое приложение на отдельные функции, напр. Бизнес-уровень, уровень доступа к данным, уровень представления и т. Д. Имар Спаньяр (Imar Spaanjar) по Создание приложения N-уровня .

разработал замечательную серию художественных файлов

Прошло некоторое время с тех пор, как я посещал его блог, но вы также можете найти подобный набор статей для MVC, но я не уверен в этом.

0 голосов
/ 13 декабря 2010

Если вы используете стандартные веб-формы ASP.Net (т.е. не MVC), я бы использовал элемент управления ListView для того, что вы описываете. Идея состоит в том, что вы указываете LayoutTemplate, ItemTemplate и привязку данных к своему списку.

Я хотел бы избежать WELL, создавая HTML в виде массивных длинных строк и вставляя его в вашу страницу, отладка такого рода вещей не доставляет удовольствия, когда он неизбежно ломается, и, скорее всего, это будет собака производительности. Контроллеры ASP.Net предназначены именно для этой цели и имеют преимущество в тысячах / миллионах человеко-часов разработки и тестирования.

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

В общем, для того, что вы описали, я бы использовал LinqToSql или, более вероятно, Entity Framework, чтобы обернуть доступ к моей базе данных. В зависимости от сложности проекта, я могу абстрагироваться от репозитория, но только если это того заслуживает. Контекст Linq / EF представляет собой то, что вы описываете как (1), то есть отдельный класс, отвечающий только за доступ к базе данных.

Я бы тогда использовал элемент управления ListView на странице и связывал его при загрузке страницы.

Например:

<!-- rest of page -->
<asp:ListView ID="ListView_Books" runat="server" ItemPlaceholderID="itemPlaceholder">
   <LayoutTemplate>
      <ul>
         <asp:Placeholder ID="itemPlaceholder" runat="server" />
      </ul>
   </LayoutTemplate>
   <ItemTemplate>
      <li>
         <%# DataItem.Title %>, by <%# DataItem.Author %>
      </li>
   </ItemTemplate>
</asp:ListView>
<!-- rest of page -->

Мой код будет иметь что-то вроде (VB):

Protected Sub Page_Load()
   ListView_Books_Bind()
End Sub

Protected Sub ListView_Books_Bind()
   Dim dataContext As New MyDataContextClass
   ListView_Books.DataSource = dataContext.Books
   ListView_Books.DataBind()
End Sub

Protected Readonly Property DataItem As Book
   Get
      Return DirectCast(Page.GetDataItem(), Book)
   End Get
End Property

Редактировать - включены комментарии Паули - спасибо!

...