• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Poprawne użycie wzorca MVC.

Cloud VPS
0 głosów
367 wizyt
pytanie zadane 7 lutego 2019 w C# przez Antero00 Gaduła (3,670 p.)
Cześć,

Na internecie widziałem już różne, implementacje z użyciem MVC w ASP.NET. Moje pytanie jest następujące, w swojej aplikacji zapisałem to następująco:

Model - tylko właściwości ( reprezentujące tabele w bazie danych + określenie relacji)

View - wiadomo sam widok,

Controller - dla danej tabeli wykonuje przekierowanie na określoną metodę, która ma wykonać pewną akcję np. dodanie osoby do bazy

czy kontroler w tym wzorcu powinien zawierać metody odpowiedzialne za np. zapis do bazy, odczyt lub coś innego ?

Ja zrobiłem to tak, że mam osobny folder w którym mam stworzone klasy, do których odwołuję się z kontrolera gdy chcę pobrać/zapisać jakieś dane itp. ?

czy to podejście jest poprawne ?

2 odpowiedzi

+2 głosów
odpowiedź 7 lutego 2019 przez Snejki Stary wyjadacz (14,520 p.)
Raczej dąży się do tego aby kontroler był jak najmniej złożony.

Tworzone są więc repozytoria do operacji na danych, które są wstrzykiwane do kontrolera.

Polecam poczytać więc o czymś takim jak dependency injection.
+1 głos
odpowiedź 8 lutego 2019 przez MikDal Mądrala (5,660 p.)

 

Żadnego manipulowania danymi w bazie danych z poziomu kontrolera! Jeżeli mówi Ci coś ZPO (zasada pojedynczej odpowiedzialności) to zgodnie z nią kontroler powinien tylko reagować na żądania użytkownika. Jak zapisywać do bazy? Na stronach wprowadzających do tematu można zobaczyć takie przykłady:

public class MyPage : SomeBaseType
    {
        // obiekt odpowiedzialny za kontakt z bazą danych
        private readonly MyDatabaseContext _context; 

        public CreateModel(MyDatabaseContext context)
        {
            _context = context;
        }

        public IActionResult OnGet()
        {
            return Page();
        }

        public async Task<IActionResult> OnPostAsync(MyModel model)
        {
            // Tutaj dodajeesz dane do bazy danych
            _context.MyModels.Add(model);

            return RedirectToPage("./Index");
        }
    }

Uważaj, powyższy kod jest mocno uproszczony!

Jeszcze jedna rzecz: Microsoft zaleca aby odchodzić od projektów które nazywa MVC na rzecz RazorPages, jednak założenia (rozdział na widok-kontroler-model) pozostają takie same.


Polecam oficjalny poradnik na stronie Microsoftu dotyczący ASP.NET Core MVC: https://docs.microsoft.com/pl-pl/aspnet/core/tutorials/first-mvc-app/?view=aspnetcore-2.2. Według mnie świetnie opisuje zagadnienia związane z tym wzorcem projektowym i odpowie na twoje pytanie: co zrobić z dostępem do bazy. Jeśli język angielski to dla Ciebie problem, to mogę spróbować przetłumaczyć ten tutorial (wiadomo trochę to zajmie), ale tym więcej będę miał do tego chęci im więcej osób się zainteresuje :). A jakby chciał ktoś pomóc to może pisać na priv.

komentarz 8 lutego 2019 przez Antero00 Gaduła (3,670 p.)
Własnie w moim projekcie napisałem, że kontroler tylko reaguje na żądania i z jego poziomu wywołuję inną klasę odpowiedzialną np. za dodanie osoby do bazy.( gdzie ta klasa znajduje się w osobnym folderze).

Więc rozumiem, że w miarę dobrze to rozdzieliłem.

Dzięki za link, jeśli chodzi o angielski to nie ma z tym problemu.

Podobne pytania

0 głosów
0 odpowiedzi 194 wizyt
pytanie zadane 27 grudnia 2020 w C# przez Jaqub09 Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 159 wizyt
pytanie zadane 7 grudnia 2020 w C# przez dz3101 Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 261 wizyt
pytanie zadane 4 grudnia 2020 w C# przez dz3101 Nowicjusz (220 p.)

93,482 zapytań

142,414 odpowiedzi

322,761 komentarzy

62,894 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...