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

Poprawne użycie wzorca MVC.

Object Storage Arubacloud
0 głosów
302 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 155 wizyt
pytanie zadane 27 grudnia 2020 w C# przez Jaqub09 Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 109 wizyt
pytanie zadane 7 grudnia 2020 w C# przez dz3101 Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 230 wizyt
pytanie zadane 4 grudnia 2020 w C# przez dz3101 Nowicjusz (220 p.)

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...