Co to jest „logika prezentacji” i ile jest dopuszczalne w widokach?

13

W mojej aplikacji internetowej muszę podać formularz do tworzenia i edycji. Formy tworzenia i edytowania różnią się nieznacznie, więc moim zdaniem zamierzam zrobić coś takiego:

<form>
// a lot of htnl goes here 
@if (editing)
{
  // some more fields shown in edit mode
}
@if(!editing)
{
 // some stuff shown in create mode
}

Zawsze starałem się nie umieszczać żadnych ifoświadczeń w moich widokach, ale tym razem nie widzę żadnej innej opcji poza kopiowaniem ogromnej części HTML w dwóch miejscach, czego nie chcę robić. Czy to właściwa „logika prezentacji” i czy są jakieś inne opcje?

Georgi Georgiev
źródło

Odpowiedzi:

17

Logika prezentacji obejmuje logikę i obliczenia potrzebne do prawidłowego przedstawienia danych biznesowych dla danego widoku.
W przypadku złożonych widoków graficznych mogą to być dość złożone obliczenia (na przykład obliczanie wielkości każdego wycinka kołowego i pozycjonowanie etykiet wykresu kołowego), ale główną cechą jest to, że oblicza tylko informacje istotne dla bieżącego wyświetlić i nie modyfikuje w żaden sposób danych biznesowych.

To, czy wybór pól do trybu edycji / tworzenia jest właściwym zastosowaniem logiki prezentacji, jest dyskusyjne. Częściowo zależy to od rodzaju i ilości personalizacji.
Na przykład, jeśli różnica jest tylko zmianą tytułu lub wyświetleniem jednego lub dwóch pól jako tylko do odczytu w jednym z trybów, wówczas właściwym wyborem może być posiadanie jednego widoku i dynamiczne wybieranie trybów.
Z drugiej strony, moją pierwszą reakcją było to, że tak naprawdę powinny to być dwa różne widoki, w których wspólne części są importowane z trzeciego pliku (podobnie do tego, jak często nagłówek i stopka są dodawane do widoków).

Bart van Ingen Schenau
źródło
12

Używanie instrukcji @if lub dwóch w widoku Razor wydaje się całkowicie uzasadnione.
Dodali @if do Razor - należy go używać.

Twój kod może zostać skrócony do jednego @if:

@if (editing)
{
  // some more fields shown in edit mode
}
else
{
 // some stuff shown in create mode
}

Alternatywą jest użycie trzech widoków:

  • Widok częściowy zawierający wspólny kod HTML
  • Utwórz widok (wywołuje widok częściowy)
  • Edytuj widok (wywołuje również widok częściowy)

Możesz sprawdzić DisplayTemplates i EditorTemplates, które są dobrym sposobem dzielenia widoków tylko do odczytu i edytowalnych.

http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html


źródło