Model-View-Controller (MVC) forklaret ved bestilling af drinks i baren

Hvis du har været i en bar, så er MVC ikke så hårdt.

Model-view-controller (MVC) -rammer er en vigtig del af opbygningen af ​​moderne webapplikationer. Gå ind i et rum med webudviklere, og du vil sandsynligvis blive bombarderet med omtale af Ruby on Rails, Angular eller Django.

Mere generelt kan MVC-logik bruges til at beskrive næsten enhver webudviklingsproces, der bruger et sprog som PHP, Ruby, Python eller JavaScript.

Alligevel…

Mange webudviklere navigerer i denne mystiske verden ved at hacke gennem ukrudtet med et smil på ansigtet. Når en seniorudvikler eller holdkammerat skal se på koden fra en af ​​disse udviklere, giver de en øjeblikkelig hjælp, efterfulgt af et hurtigt foredrag om almindelig kodningspraksis.

Dette er ingen måde at gå igennem livet på! Faktisk kan MVC-mønsteret i moderne webudvikling let forklares ved at bestille en drink fra en bartender. Og ja, det betyder, at hvis du har været i en bar, kan du forstå det store strukturelle mønster, der deles af alle webapps.

Modigt hacking gennem forhindringerne indtil virkeligheden rammer

Hvad er MVC-mønsteret?

  • Model : Strukturerer dine data i en pålidelig form og forbereder dem baseret på controllerens instruktioner
  • Visning : Viser data til brugeren i letforståeligt format baseret på brugerens handlinger
  • Controller : Optager brugerkommandoer, sender kommandoer til modellen til dataopdateringer, sender instruktioner for at se til opdateringsgrænsefladen.

Eller i diagramform:

Det var kedeligt. På baren.

En nybegynder webudvikler går ind i en bar ...

Du går ind i en bar en fredag ​​aften og nærmer dig bartenderen. Da baren allerede er overfyldt, skubber du igennem en menneskemængde, indtil du endelig fanger bartenderens opmærksomhed, og du sprænger ud: "Et Manhattan, tak!"

Du er brugeren , og din drikkeordre er brugeranmodningen . For dig er Manhattan bare din yndlingsdrink, og du ved ganske pålideligt, at dette vil være en sød og lækker drink.

Bartenderen giver dig et hurtigt nik. For bartenderen er Manhattan ikke en velsmagende drink, det er kun en række trin:

  1. Tag fat i glas
  2. Tilsæt whisky
  3. Tilsæt vermouth
  4. Tilføj bitter
  5. Omrør drikke
  6. Tilsæt kirsebær
  7. Bed om kreditkort og opkrævning.

Bartenderens hjerne er controller . Så snart du siger ordet “Manhattan” på et sprog, som de forstår, begynder arbejdet. Dette arbejde har samme karakter som at fremstille en margarita eller jordbærdaiquiri, men bruger forskellige ingredienser, der aldrig vil blive forvirret. Bartenderen kan kun bruge de værktøjer og ressourcer, der ligger bag baren. Dette begrænsede værktøjssæt er modellen og inkluderer følgende:

  • Bartenders hænder
  • Rysteapparater / blandeapparater
  • Spiritus
  • Blandinger
  • Briller
  • Pynt

Måske har de måske en robotassistent i en mere avanceret bar! Eller en automatisk drikkeblander. Det betyder ikke noget for din særlige bartender, der kun kan bruge de tilgængelige ressourcer.

Endelig er den færdige drink, som du kan se og forbruge, udsigten. Visningen er bygget ud af de begrænsede muligheder fra modellen og arrangeret og transmitteret via controlleren (det vil sige bartenderens hjerne).

Erfaringer

  • Vil du have en drink til? At råbe på dit tomme glas, udsigten, gør dig absolut ikke godt. Du skal tale med bartenderen.
  • Tiden mellem bartenderen, der hører anmodningen og begynder at oprette en drink, skal være absolut minimal. Dette kaldes undertiden en ”tynd controller” - med andre ord, controlleren skal indeholde en minimal mængde logik og delegere så meget som muligt til modellen. En god bartender vil ikke kun have opskrifter husket, men også forberede ingredienserne og værktøjerne på en pålidelig måde hver aften, så det er nødvendigt med en minimal mængde søgning og ordning, når kunderne begynder at bestille.
  • Kunne bartenderen hælde alle ingredienserne direkte i kundernes mund og forvente, at kunden svingede den rundt og blandede drikken? Ja, muligvis antager jeg. Du ønsker at holde så meget af din logik inden for modellen som muligt i modsætning til inden for visningen. Med andre ord foretrækker det at lave en drink bag baren frem for at blande den i kundens mund.
  • Hvis du bestiller en øl, behøver bartenderen næppe gøre noget. Måske fjerner de simpelthen hætten og giver dig en drink. Når det er sagt, skal du stadig anmode bartenderen. Ølen vises ikke på magisk vis foran dig.

Binde det tilbage til webudvikling

Sådan afspilles den samme proces i en moderne webapp:

  • Brugeren fremsætter en anmodning langs en rute, lad os sige / hjem.
  • Den controlleren modtager denne anmodning og giver et bestemt sæt af ordrer, der er relateret til denne rute. Disse instruktioner kan enten være til visningen at opdatere eller tjene en bestemt side, eller at modellen udfører specifik logik. Lad os antage, at denne anmodning har en vis logik forbundet med det.
  • Modellen udfører logikken, trækker fra en database og sender et ensartet svar tilbage baseret på controllerens instruktioner.
  • Controlleren sender derefter disse data til visningen for at opdatere brugergrænsefladen.

Hver gang en anmodning kommer ind, skal den først gå til controlleren, før den kan konverteres til instruktioner til visningen eller modellen. Ruby on Rails wikipedia-artiklen indeholder en yderligere oversigt, hvis du leder efter mere.

Hver gang du har brug for at lære en ny ramme om webudvikling, støder du på dette konsistente MVC-mønster. Og hvis en bestemt ramme adskiller sig fra dette, kan du være sikker på, at forfatterne vil forklare deres nye mønster med henvisninger til MVC.

Dette skulle gøre det lettere at lære meget - når du først udvikler dig med MVC en gang, kan alle nye rammer passe inden for din komfortzone.

Nød du denne guide? Lad mig vide i kommentarerne!