Facebook как страница профиля в asp mvc - проблема архитектуры - PullRequest
0 голосов
/ 29 ноября 2011

Пользователи на моем сайте имеют свою страницу профиля. Там пользователи могут настроить свои данные. При нажатии кнопки редактирования эта страница становится редактируемой.

Теперь другой пользователь может просматривать профили других пользователей.

Вот мне и интересно:

  1. Должен ли я сделать два контроллера ProfileController/Index и ProfileAsAnotherUserSeeItController/Index. Сначала использовать владельца профиля для настройки данных, а другого использовать других пользователей для просмотра этих данных?
  2. Имеет только один контроллер ProfileController/Index и на основании некоторых параметров определяет, какие данные отображать (кнопки редактирования, удаления кнопок элементов профиля и т. Д.)?

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Лично у меня будет один контроллер => AccountsController или UsersController.В этом случае у меня будет ActionMethod с именем Details, в котором перечислены все детали для конкретного пользователя.

Если бы моим сайтом был StackOverflow, пример маршрута мог бы быть:что означает

{controller}/details/{id}/{optional anything .. which in this case is a name, for SEO}

У меня также был бы Edit метод действия

например http://stackoverflow.com/users/edit/30674

или

{controller}/{action}/{id}

Теперь логика в методе действия Details будет определять, что должно отображаться в представлении.Таким образом, если вы хотите иметь кнопку «Редактировать», метод действия контроллера должен выяснить это, и представление отобразит его, только если ему было сказано.

например (псевдокод)

public ActionResult Details(int userId)
{
    var user = Database.Load<User>(userId);
    if (user == null)
    {
        return HttpNotFound();
    }

    var viewModel = new DetailsViewModel
                    {
                        DisplayName = user.DisplayName,
                        Name = (user.FirstName + " " + user.LastName).Trim()
                    };
    if (LoggedInUser != null && LoggedInUser.HasRole(Roles.CanEditThisUser)
    {
        viewModel.IsEditButtonVisible = true;
    }

    return View(viewModel);
}

и вид будет простым .. как

<snip html stuff>
@if (model.IsEditButtonVisible)
{
    // display edit button Html code.
}

// Display user details Html stuff..

На заметку: -

  1. Представления строго типизированы в свою собственную ViewModel.
  2. Контроллер делает все , вычисляя из вещей.
  3. Вид действительно очень тупой.
0 голосов
/ 29 ноября 2011

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

Если вы разместите всю логику в одном представлении, чтобы определить, какой контент отображать на основе контекста вашего представления, вам, вероятно, будет сложнее поддерживать его по сравнению с двумя совершенно отдельными представлениями «отображения» и «редактирования».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...