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

Poprawne użycie wzorca MVC.

0 głosów
96 wizyt
pytanie zadane 7 lutego w C# i .NET przez Antero00 Gaduła (3,350 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 przez Snejki Stary wyjadacz (12,060 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 przez MikDal Mądrala (5,000 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 przez Antero00 Gaduła (3,350 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
1 odpowiedź 181 wizyt
pytanie zadane 20 lutego 2018 w C# i .NET przez tomek2323 Użytkownik (910 p.)
0 głosów
0 odpowiedzi 603 wizyt
0 głosów
1 odpowiedź 849 wizyt
pytanie zadane 15 czerwca 2017 w C# i .NET przez Kriszu Nowicjusz (200 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

60,259 zapytań

105,942 odpowiedzi

220,114 komentarzy

32,464 pasjonatów

Przeglądających: 325
Pasjonatów: 21 Gości: 304

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...