MVVM tervezési mintában a lekérdezéseket hol kell elhelyezni?
A lekérdezés az lényegében maga a Modell része. Azaz modell mappa.
Úgy látom, nem érted az MVVM minta lényegét, inkább elmagyarázom.
Van egy modelled. Ez maga az adat, és a réteg, ami biztosítja az adathoz a hozzáférést (jellemzően ORM könyvtár, de ha muszáj, akkor a modell gettereibe stb. írhatsz sql lekérdezést kézzel).
Van egy View azaz nézet. Ez semmi mást nem csinál, csak megjeleníti az adatot, de sablonszerűen, azaz neki mindegy kéne legyen milyen adatot kap, neki nem feladata dolgozni vele, csak megjeleníti. Lehetőség szerint ide lehet onClick és hasonló eseményeket integrálni, ha inline megoldásokkal megoldható.
És végül létezik a ViewModel, ami egy köztes réteget biztosít a modell és a nézet közé. Az ő dolga az, hogy a modellben lévő adatot átalakítsa olyanra, amit a view kezel, és visszafelé és igaz, amit inputnak adnak a nézetben például egy mezőben azt átadja megfelelően a modellnek.
Ha ezt így mind átgondolod, megérted, miért nem a viewmodel feladata a lekérdezés.
Model -> Minden ami business logic. Ez nem jelenti azt, hogy csak "modelleket" írhatsz oda, nyugodtan írhatsz oda mást is, servicet, bármit, ami a business logichoz kell (microsoft hivatalosan ezt mondja a modelről)
ViewModel -> Adatokat dolgoz fel és tárol megjelenítésre.
View -> gyakorlatilag a felhasználói felület.
"Model classes are non-visual classes that encapsulate the app's data. Therefore, the model can be thought of as representing the app's domain model, which usually includes a data model along with business and validation logic."
És mi az a buisness logic? Mi tartozik bele? Ezt már sok helyen olvastam, de sehol sem volt leírva sohase. Mintha a kisujjból kéne kiszopni. :)
Tehát akkor példa, hogyha a Modelben fejtük ki a metódusokat, lekérdezéseket:
Ha jelszót kérek be inputról:
A ViewModel megkapja a jelszót a View inputról. A ViewModel elkéri a HASH metódust, majd az inputról kapott jelszót elHASHELI és a változóba elmentett hash-t vissza adja Modelnek. Majd elkéri az adatbázisban tárolt jelszót és visszakéri a már előbb lehashelt jelszót is, amit összehasonlít. Majd, ha egyezik visszaadja a Modelnek, a Modellnak az egyezést, majd továbbítja a ViewModel az egyezést a View-ra, hogy a felhasználót beengedje és a ViewModel változtatja a felütet a bejelentkezésről egy másik ablakra.
"A színtiszta modell osztályokba nem írnék semmit, az csak adatot tároljon,"
De fentebb még az volt magyarázva, hogy nem csak adatot tárol.
A példa meg csak egy példa, arra vonatkozóan, hogy jól értem e a dolgot. ;).
Amúgy meg szerintem teljesen, mindegy, hogy az alkalmazásba hasonlítod össze vagy az adatbázisba. Adatbázist nem is terhelném ezzel. Inkább akkor már szerveroldalon. De ez tényleg csak egy példa volt ...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!