Avatar billede mariendalsvej333 Nybegynder
07. august 2012 - 20:25 Der er 7 kommentarer

MVC og MVP - front- eller back-end?

Når jeg bliver spurgt om hvilken type udvikler jeg er, eller hvor jeg "ligger" henne af: back-end eller front-end udvikler, så svarer jeg som regel back-end, da jeg anser Presentation laget hvor Views, Models, Presenters/Controllers holder til, i en typisk 3-lags arkitektur. Front-end er vel kontrekt ASP.NET, HTML, CSS og Javascript/AJAX etc.? Er der nogen som er ueninge med mig i det? Det er UI mønstre, for at afkoble UI'en fra konkret forretningslogik og samtidig gøre det test bart.

Håber at høre fra nogen.
Avatar billede softspot Forsker
07. august 2012 - 21:46 #1
I min terminologi er en frontendudvilkers opgave at formidle systemets funktioner og muligheder på den mest hensigtsmæssige og effektive måde. Dvs. noget med opsætning og styring af brugergrænsefladen, altså grænsefladen mellem brugeren og systemet. Typisk er det vel så, når man taler en webplatform, noget med at kunne HTML og CSS, samt evt. JavaScript. Alt det der ligger under det niveau (bag ved) er for mig backend, selvom det nok er lidt firkantet anskuet. Der er nok et vis overlap, som frontendudvikleren også kan tage sig af, men jeg ser det ikke som dennes primære opgave. Views ligger i frontendudviklerens domæne, men ikke ViewModels, Controllers og Models.

Backendudvikleren sørger for at modtage, behandle (håndhæve regler) og finde data og servicere bla. frontend med disse. Der kan naturligvis være flere grænseflader ifht. backend, så frontend er blot én abonnent. Models og f.s.v. også controllers ligger, for mig at se, i backendudviklerens domæne. Herunder evt. Viewmodels, der umiddelbart blot er det format (og afgrænsning) data har ifht. frontend.

AJAX er umiddelbart en måde at kommunikere på, så jeg ser det ikke decideret som en specifik frontend eller backend-disciplin.

JavaScript er vel heller ikke udelukkende frontend. Der kan sagtens laves forretningslogik som ligger på klienten og kører i JS. Der findes mange frameworks og biblioteker, der gør understøttelsen af MVC lettere på klienten (AngularJS, Knockout JS, Backbone, Meteor m.fl.)

ASP.NET er et framework som håndterer webapplikationer og deres request-cycles, herunder stiller en masse funktionalitet til rådighed for at facilitere denne process. Jeg synes ikke man udelukkende kan kategorisere ASP.NET som en frontend-teknologi.

Jeg påstår langt fra, at jeg har den endegyldige sandhed om emnet, så ovenstående er bare mine umiddelbare tanker om rollefordelingen.
Avatar billede arne_v Ekspert
07. august 2012 - 23:28 #2
Med en klasisk opdeling:

system = client tier + app tier + database tier

app tier = presentation layer + business logic layer + data access layer

vil jeg kalde:

client tier + app tier presentation layer = frontend

app tier business logic layer + app tier data access layer + database tier = backend

MVC og MVP boer vaere ren presentation layer og dermed frontend. Det kraever naturligvis at M er en proxy for business logic layer.
Avatar billede softspot Forsker
08. august 2012 - 09:59 #3
@arne: Vil det så sige at M i MVC, iflg. dig, er lig med ViewModel? Jeg opfatter umiddelbart M'et for forretningslaget...
Avatar billede arne_v Ekspert
08. august 2012 - 14:15 #4
M i MVC er model.

Man kan lave M lig med forretningslaget.

Men i ægte MVC (hvilket MVC web typisk ikke er !) skal M faktisk opdatere V.

Det er ikke business logic at opdatere V.

Derfor ser jeg M som værende en presentation layer del som 1) laver simple passthrough kald til business logic og 2) opdaterer view når C laver opdateringer.

Derudover synes jeg rent praktisk at det giver bedre samling at have en enkelt del af presentation layer M som taler med business logic fremfor to (baade V og C).
Avatar billede arne_v Ekspert
08. august 2012 - 14:17 #5
Hvis man i stedetfor den traditionelle 3 layer:
  presentation
  business logic
  data access
bruger en 4 layer:
  presentation
  control
  business logic
  data access
saa er:
  V = presentation
  C og M = control

Den opdeling synes jeg ofte giver god mening, da V ofte kraever helt andre skill sets end C og M.
Avatar billede softspot Forsker
08. august 2012 - 14:28 #6
@arne: jeg synes bare jeg har opfattet at det du så definerer M ved, af andre i .NET-miljøet kaldes for ViewModel (bla. Scott Hanselmann). Jeg er helt enig i at det ikke er BL's ansvar at opdatere presentationslaget og din inddeling giver i øvrigt fin mening i men verden.
Avatar billede arne_v Ekspert
08. august 2012 - 14:43 #7
Der er nok korrekt.

MVVM V = MVC V
MVVM C = MVC C
MVVM VM = MVC M proxy to business logic
MVVM M = business logic

saa hvis vi taler MVVM og ikke MVC, saa er det anderledes.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester