Michali schreef op dinsdag 28 augustus 2007 @ 14:31:
Meer dan JSON eval ik ook niet, en daar ligt mijn grens idd. ook. Maar volgens mij zitten we langs elkaar heen te praten of interpreteren we bepaalde concepten net op een andere manier, want deze zin:
[...]
deed mij juist vermoeden dat je het niet erg vindt om JS te outputten en dit te evallen. Wat bedoelde je hier dan mee?
[...]
In theorie vind ik het niet erg om code te outputten die direct acties op de client doet. In feite krijg je dan een soort 'push' model, want je laat de server bepalen wat de client doet. De HTML wordt sowieso door de server geoutput en je serverside logica (PHP/Java) staat ook op de server (duh), dus je JS, CSS, HTML en PHP/Java staan bij elkaar. Dat wil je, want functioneel gezien zullen ze waarschijnlijk erg veel overlap hebben. De lifecycle van deze onderdelen zal doorgaans gelijk zijn (als je Java aanpast, zal de JS wel mee moeten veranderen), dus uit architectuur perspectief is dit een valide plaats. (ik denk nu vanuit een componentgedachte, ofwel complete, autonome stukken applicatie)
Wat wel een nadeel is, is dat je simpelweg eval() nodig hebt om je response naar volwaardige code en variabelen te converteren. Iemand kan dus willekeurige rotzooi (code snippets) terugsturen waardoor je applicatie gevoeliger wordt voor XSS.
[...]
En naar mijn idee heb ik ook wel een service layer perspectief, maar misschien komt die niet overheen met hoe jij er naar kijkt dus misschien kun je daar iets dieper op ingaan? Een command zie ik in dit geval alleen als een call naar de server, oftewel een aanroep van een bepaalde service. Een erg sterk voorbeeld van een command is het dus nu ook weer niet, want ik wrap deze calls meestal niet echt in eigen klassen, zoals je de meest gangbare varianten van dit pattern zou verwachten. Misschien is dat dus inderdaad niet zo'n goede vergelijking. Maar de services die ik aanroep zijn idd. eigenlijk een soort methodes of commando's die ik asynchroon op afstand aanroep. Dus in dat opzicht zijn het wel weer een soort commands.
De vergelijking met het command pattern die ik trok, komt uit het feit dat de client controle heeft over de logica die uitgevoerd wordt in de scope van de server. Ofwel, de client stuurt een command object met bepaalde statements naar de server en die server voert het uit. De client bepaalt dus de logica.
Mijn opmerking over service layer perspectief komt voort uit het feit dat je dat met business logic niet wilt. Daar wil je gewoon een laag hebben die volledige controle heeft over wat er gebeurt. Een client die dubieuze acties doet, is het laatste dat je dan kunt gebruiken. Dat is tegelijk ook mijn kritiek tegen deze AJAX vorm, aangezien de client (die tenslotte het beste weet wat hij op de pagina kan en moet doen) geen controle meer heeft. Die controle is naar de verzender van de response gegaan, ofwel de server. Ik verwacht dat hierdoor cross-component interacties lastiger worden.
Ofwel, vanuit een architectonisch/component perspectief klinkt het het allemaal wel goed, maar praktisch gezien is het niet echt een fijne manier van werken denk ik.
Beetje dubbelzinnige post, maar ik denk serieus dat deze manier van werken voors en tegens heeft die redelijk gelijkwaardig zijn. Vandaar ook mijn eerste reactie dat je moet oppassen met rake reacties, want een methodiek kan best wel voordelen bieden in een specifiek geval.
Ik bedoel deze reactie:
"Ook kan ik je melden dat jouw methode je echt de kop op gaat breken als je applicatie wat groter wordt en je op verschillende plaatsen wat wijzigingen moet gaan doorvoeren."