Verwijderd schreef op donderdag 18 oktober 2007 @ 19:11:
[...]
Daar ga ik voor het gemak wel vanuit. Daarmee is het 'probleem' met webforms opgelost, en dan zou de gebruikelijke kritiek moeten verstommen. Voordat het uit is hebben we alleen dat ene filmpje van een uur om ons oordeel te vellen, en dat zag er gewoon heel goed uit.
Je hebt het filmpje niet bekeken, dat zie ik aan je reactie. De postback gaat wél overboord in het MVC model van Microsoft, dat wordt letterlijk met zoveel woorden gezegd. Dus het verhaal van stateful gaat ook verdwijnen, precies wat jij graag ziet, dus ik begrijp niet dat je niet enthousiast bent (ik wel namelijk).
Even wat uitleggen: ik kom nogal vaak in aanraking met wat ik altijd 'demoware' noem, vanuit Microsoft. het ziet er allemaal geweldig uit, het werkt altijd fantastisch... de visie is goed etc. althans, binnen de grenzen van de demo.
Dat is nog nooit anders geweest. Nu wel? nee, geloof me, dat is echt niet zo.
Sinds 1993 is er geen reet veranderd mbt wat een webpage is: het is platte HTML en sinds eind jaren 90 ook met javascript. Dat is nooit veranderd. Als ik een page opvraag van een server, dan krijg ik HTML en javascript. Dan kun je wel moeilijk doen op de server, maar daar ga jij het fenomeen HTML en javascript niet mee wegpoetsen.
De postback overboord? Dat kan alleen wanneer de volledige page in de browser draait en alle data beschikbaar is OF via ajax kan worden aangeleverd. Nu is ajax niet altijd mogelijk (security) en dus is het lang niet altijd zo dat je even een page maakt met een grid met een page uit een grote resultset ZONDER postbacks, dan kan nl. gewoonweg niet.
En dan gaat die postback overboord? Dat KAN niet, want jij krijgt page 2 van de data niet uit de page geperst wanneer page 2 niet in de page zit. Je moet dan naar de server terug. En dit is geen kleinigheid, want wellicht heb je met entity objects te maken en waar worden die dan bewaard? Je hebt dan te maken met state in die entities die wellicht gewijzigd is en wie gaat dat syncen? Dat gaat echt niet vanzelf.
Het werkt alleen als de view in de browser een javascript based view is die gevoed wordt door een webservice, maar dat is niet wat MVC is.
En ze maken ook alles 'extensible' in die zin dat je zelf je de view engine kan verwisselen, dat je de routering ook kan verwisselen, dat ze nu wél een IHttpRequest en IHttpContext hebben (dus die kun je zelf implementeren voor je tests) en dat ze alle gangbare IoC frameworks werkend hebben. Je kunt ook kiezen om IController te implementeren, te erven van Controller of helemaal niets van die twee.
Kijk a.u.b. het filmpje en zie al je zorgen besproken worden. Of werk je helemaal niet met ASP.NET en gebruik je dit topic alleen om de valide doch oude kritiek over webforms te spuien?
Om in asp.net land te bllijven: ik heb 2 datasource controls gemaakt die meer functionaliteit hebben dan die van MS bij elkaar, en om dat te toen moet je echt elke byte snappen hoe een webform werkt anders kom je er niet uit (leaky abstraction, anyone?). Webforms zijn een brakke abstractielaag die gewoon leuk leek maar het niet is, omdat je de innerlijke werking ervan moet begrijpen (volgorde van events etc.) voordat je iets kunt. Dit is een fundamentele flaw. dezelfde mensen gaan jou nu een MVC framework brengen. Ik verwacht er niet veel van.
Wat je ook vergeet is dit: toen ik in 1994 mijn eerste webpage maakte en mn eerste server-side driven site met perl (cgi's) was het vrij duidelijk wat gedaan moest worden. Dat hele principe is eigenlijk nooit veranderd: via de voorganger van asp (htc files) en ASP.NET is het nog altijd zo dat je gewoon HTML rendert op de server en dat daarna de server klaar is. De postback komt bij de server aan en daar is alles dus weg en moet opnieuw worden opgebouwd. In andere web platforms is het nog steeds hetzelfde: je rendert html, je bent volledig in sync met wat er WERKELIJK gebeurt. In ASP.NET is dat volledig zoek: je weet niet wat er gebeurt want dat zie je niet, echter je moet wel weten wat er gebeurt want anders kun je niet bepaalde dingen maken (komt een button click event voor of na de bind van grid met datasource? )
Dus per saldo is men laag op laag op laag gaan stapelen, maar feitelijk is er niets veranderd: er zijn alleen meer problemen bij gekomen. (want met perl een webpage renderen is echt niet zo moeilijk). Nu komt er een MVC framework, en dat is leuk voor degenen die dat willen gaan gebruiken, maar ten eerste gaat 99% van de developers er kompleet mee door het ijs, want het matched niet met hoe HTML werkt en niet met hoe ASP.NET werkt en ten tweede is ASP.NET an sig gewoon flawed to the bone, dus het moet niet IN ASP.NET zitten maar het compleet vervangen en het moet gebouwd worden door een ander team, niet het team wat ASP.NET gebouwd heeft. Dat zie ik niet gebeuren.
(edit). Tuurlijk lijkt het leuk, en lijkt het alsof ze het nu allemaal snappen etc. maar feitelijk is het gewoon een resultaat van niet nadenken. IS MVC wel DE manier om webpages te maken? MVC is niet een WEB pattern, maar een APPLICATION pattern. De M is niet iets van de UI laag, en de controller is feitelijk dat ook niet. De viewer is feitelijk dus de enige die in de web laag thuis hoort.
Een DataSource control op een page is feitelijk nu al een controller die een model beheert en die wordt gebruikt door de viewer (page). Je kunt je code feitelijk al testen met een datasource, want de methods die aangeroepen worden door de bound controls zijn gewoon public.
Maar wanneer je dat gaat proberen kom je erachter dat feitelijk daar het probleem niet zit. De hele lifecycle van de data in een form (of beter: wat die data voorstelt, semantisch) is iets wat je feitelijk niet kunt overlaten aan generieke code want het is de kern van jouw applicatie. M.a.w.: je moet het zelf schrijven, dus hoe men process pages maakte in asp. Maar dat wil men niet, men wil dat laten doen door een framework. Dat is prima, maar dan krijg je magic die je wellicht niet wilt. Voorbeeld: wanneer je een page van 10 customer entities in een grid stopt en die page gaat naar de browser. De user verandert van 3 het adres en klikt op 'Save'.
Wat gebeurt er dan? Wat de developer wil is dat op de server de customer entities die gewijzigde data krijgen zodat ze kunnen worden verscheept naar de logica die er verder iets mee gaat doen (bv saven). Dat wil de developer niet zelf doen. Echter OMDAT men dat niet wil, en terecht, moet je het overlaten aan een framework en dat heeft een prijs: OF magic code wat allerlei randvoorwaarden heeft (bv de huidige datasourcecontrols) OF handgeschreven code wat feitelijk neerkomt op het schrijven van process pages en je het zelf toch loopt te doen (op zich niets mis mee, maar als je je het dan realiseert, waarom gebruik je dan nog een framework wat niet matcht met hoe HTML werkt? )
[
Voor 17% gewijzigd door
EfBe op 19-10-2007 10:00
]