Разработка веб-архитектуры ASP.NET - Часть 2

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

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

Мы хотим перейти на архитектуру MVC, чтобы сделать наши страницы более безопасными и управляемыми, однако с этим связана серьезная проблема. В каждом разделе нашей системы интрасети есть перекрестные ссылки на другие страницы в других разделах. Так, например, предположим, что у нас есть раздел под названием «Игры», и в нем есть раздел под названием «Люди, играющие в игры», но на самом деле здесь просто использовался фрейм, указывающий на страницу, которая находится в другой папке в нашей системе интрасети под названием «Персонал», затем «People.aspx» (чистый пример). Как архитектура MVC справится с подобным?

У нас есть страницы, отображаемые в совершенно разных областях нашей интрасети, которые на самом деле являются одной и той же страницей. Таким образом, наличие URL-адреса, такого как http: // mysite / section / category / page, должно было бы указывать на http: // mysite / другой раздел / разные категории / страница.

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

Поднятые вопросы будут следующими:

  • Нужны ли нам дублирующиеся страницы?
  • Есть ли способ сделать перекрестную ссылку на страницу в разных разделах с помощью MVC?
  • Подходит ли MVC для системы интрасети, состоящей примерно из 400 различных страниц?

Ваше здоровье

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
363
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Кеззер - вы уверены, что хотите взять существующую (и, я полагаю, работающую) систему и полностью переписать ее только для предполагаемых преимуществ MVC? Я знаю, что это не совсем ответ на ваш вопрос, но я бы серьезно подумал, действительно ли архитектура MVC сделает ваших клиентов более счастливыми, чем архитектура Webforms - тем более, что они этого никогда не заметят.

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

Мне очень нравится этот пост, и вы очень хорошо замечаете. Проблема, с которой мы сталкиваемся, заключается в том, что система развивается так быстро, что ее становится трудно поддерживать, особенно с использованием фреймов. У нас есть отдельные страницы index.htm для каждого раздела. Однако я полностью понимаю вашу точку зрения.

Kezzer 13.01.2009 18:50
Ответ принят как подходящий
  • Вы не должны этого делать, как и в случае со сложными типами. Вы можете перетащить минимальные просмотры в полноценное, чтобы отделить повторения.
  • Вы можете использовать Html.ActionLink для создания ссылок на страницы, и вы можете использовать Html.RenderPartial или Html.RenderAction для визуализации всего действия на вашей странице.
  • Наверняка. Как я уже сказал, вы можете разбить повторение на мелкие компоненты и включить их, когда захотите.

Например...

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

Для добавления ..

<asp:Content ID = "DefaultContent" ContentPlaceHolderID = "DefaultContentPlaceHolder" runat = "server">
<% Html.BeginForm<CatalogController>(c => c.AddProduct(null), FormMethod.Post); %>
<% Html.RenderPartial("ProductFields", ViewData); %>
<%= Html.SubmitButton("Submit", "Add") %>
<% Html.EndForm(); %>
</asp:Content>

А для редактирования ...

<asp:Content ID = "DefaultContent" ContentPlaceHolderID = "DefaultContentPlaceHolder" runat = "server">
<% Html.BeginForm<CatalogController>(c => c.EditProduct((Product)null), FormMethod.Post); %>
<% Html.RenderPartial("ProductFields", ViewData); %>
<%= Html.Hidden("Product.ID", ViewData.Model.ID) %>
<%= Html.SubmitButton("Submit", "Save") %>
<% Html.EndForm(); %>
</asp:Content>

И партиал ProductFields выглядел так

<% Product product = ViewData.Model; %>
<% IEnumerable<Category> categories = ViewData["Categories"] as IEnumerable<Category>; %>
<table>
    <tr>
        <td><%= Html.Label("Product.Name", "Name") %></td>
        <td><%= Html.TextBox("Product.Name", product.Name) %></td>
    </tr>
    <tr>
        <td><%= Html.Label("Product.Price", "Price") %></td>
        <td><%= Html.TextBox("Product.Price", product.Price) %></td>
    </tr>
    <tr>
        <td><%= Html.Label("Product.Description", "Description") %></td>
        <td><%= Html.TextBox("Product.Description", product.Description) %></td>
    </tr>
    <tr>
        <td><%= Html.Label("Product.IsActive", "Is active") %></td>
        <td><%= Html.CheckBox("Product.IsActive", product.IsActive) %></td>
    </tr>
    <tr>
        <td><%= Html.Label("Product.IsFeatured", "Is featured") %></td>
        <td><%= Html.CheckBox("Product.IsFeatured", product.IsFeatured.HasValue ? product.IsFeatured.Value : false) %></td>
    </tr>
    <tr>
        <td><%= Html.Label("Product.CategoryID", "Category") %></td>
        <td><%= Html.DropDownList("Product.CategoryID", new SelectList(categories, "ID", "Name")) %></td>
    </tr>
</table>

Итак, как видите, вы можете легко разбить свои страницы по мере необходимости, включить их и очень легко передавать в них данные с помощью ASP.NET MVC.

К сожалению, мои знания MVC, когда дело доходит до ASP.NET MVC, довольно ограничены, поэтому понять этот пример сложно. Могу ли я просто создать другую страницу в другом разделе, используя Html.ActionLink со страницей в качестве параметра или что-то в этом роде?

Kezzer 13.01.2009 19:00

Html.ActionLink генерирует URL-адрес на основе контроллера / действия. Таким образом, ваши URL-адреса не устареют, если вы измените структуру маршрутизации.

Chad Moran 13.01.2009 19:26

Я отвечу на третью часть вашего вопроса о MVC:

Над MVC намного проще работать в команде. Это особенно хорошо работает в тандеме дизайнер / программист, потому что дизайнер может работать над тем, что он / она знает, а программист может работать над тем, что он знает (давайте посмотрим правде в глаза, программистов очень мало), вместо того, чтобы работать в одном и том же пространстве. (страница .aspx) дизайнер может работать в пространстве просмотра .aspx, в то время как программист может работать в пространстве контроллера .cs.

Существует также дополнительное преимущество использования одной страницы много раз. Используя несколько разных ActionNames и немного настроив частичные страницы и переменные ViewData, вы можете использовать одну страницу снова и снова, чтобы охватить практически любой вариант использования. Мне было очень сложно выполнить аналогичную настройку с WebForms.

Элементы управления маршрутизацией, которые у вас есть в MVC, невероятно надежны, а с интеллектуальным контроллером и дизайном представления вы можете в конечном итоге сократить Интранет на 400 страниц до 20 или около того контроллеров с 80 страницами. Я перестраиваю сайт интрасети, подобный ESPN, который был выполнен на WebForms, у которого было около 200 страниц, и все это прекрасно вписывается в 8 контроллеров и 50 представлений.

  • Нужны ли нам дублирующиеся страницы?

Нет.

  • Есть ли способ сделать перекрестную ссылку на страницу в разных разделах с помощью MVC?

Да.

  • Подходит ли MVC для системы интрасети, состоящей примерно из 400 различных страниц?

как упоминалось в theBadDawg, если вы можете разделить эти 400 страниц на группы страниц, которые имеют что-то общее, это выполнимо. Судя по вашим категории и разделы, похоже, что у вас есть логическая группировка страниц.

У нас есть, но они немногочисленны и даже принадлежат к одной и той же категории, они могут не иметь отношения друг к другу. Я должен признать, что это странная система, хотя на этой неделе я собираюсь обсудить ее пересмотр. Есть ли какие-нибудь достойные ресурсы (книги), чтобы научиться этим вещам?

Kezzer 14.01.2009 00:39

Другие вопросы по теме