En dat is een specificiek nadeel van JSF???
De workflow van een standaard php is gewoon ongelooflijk transparant en door de meeste ontwikkelaars echt prima te volgen
???
Ik weet niet helemaal hoe ik dit moet rijmen met eerdere comments van jou in threads als
Imago, toekomst en mogelijkheden: Java, .NET of PHP?.
Maar als we het alleen op deze thread houden dan stel je eerst dat JSF als framework niets toevoegd, en nu zeg je eigenlijk dat we maar helemaal geen frameworks moeten gebruiken en dat we aan de PHP moeten?
En ongelooflijk transparant? Ongelooflijke
spaghetti zul je bedoelen! Heb je wel eens PHP pagina's (of JSP's in PHP-style) moeten doorlezen of onderhouden? In een 2 pagina web site'je is het mischien nog te overzien, maar bij elke niet triviale web applicatie wordt het al ongelooflijk snel een ongelooflijke grote berg spaghetti. Meestal wordt aan het begin van de page 20 parameters uit de request gehaald, daarna vinden er batterijen testen plaats en wordt van alles aan nieuwe variabelen toegekent. Daarna staat er een stuk business logic, met weer nieuwe variablen en testen, dan wordt er nog een SQL query gedraait, en vervolgens wordt er geittereerd ergens over en HTML geoutput.
Alleen zijn die plekken waar HTML naar de response gaat niet allemaal op het einde. Een dergelijke pagina kan meestal aan de hand van de uitkomst van testen diverse compleet andere pagina's worden. De benodigde HTML staat dan op alle mogelijke plekken. 1 gehele pagina zie je er dan ook met geen mogelijkheid in.
Ook heel leuk zijn al die verschillende parameters die uit de request gehaald worden. Sommige komen van externe bronnen, maar sommige worden op de pagina's zelf als postback gebruikt. Bij hergebruik van (stukken van) de pagina weet je nooit wat nou wel of niet meegenomen moet worden, en zit je een half uur variablen te tracken om te zien wat waar vandaan komt.
Helemaal lachen wordt het met het hergebruik van validatie code en helemaal business code. Die staat midden op elke pagina en moet dus bij gebruik elders telkens copy-pasted worden. Moet er iets veranderd worden, dan mag dat handmatig op elke pagina apart. Dit gebeurd nooit op identieke wijze, zodat je overal kleine inconsistenties krijgt.
Ik heb een vrij lange tijd 'het geluk' gehad om diverse projecten te mogen waar men op een dergelijke manier werkte. Pure JSP's + scriptlets of PHP pagina's gaan bijna altijd automatisch na verloop van tijd naar een dergelijke structuur. Vergeleken met die pagina's is JSF een verademing vergelijkbaar toen we op de x86 niet meer met 16bit segmenten hoefte te programmeren. De enige die JSF in dat licht gezien niet leuk vond was onze lokale drogisterij. De omzet van hoofdpijnstillers nam radikaal af nadat wij op JSF overstapte.
. Voor een simpel jsf formulier met convertors, validator, action handlers, etc, moet je toch alle kanten op springen.
Die vind ik juist enorm clean. Op de template pagina staat alleen maar een grafische layout van componenten. Validators zijn juist enorm clean en simpel. Zie mijn voorbeeld hierboven, wat is er nou moeilijk aan dat je b.v. meteen bij een input element de range instelt met een tag?
Vergelijk dat met de JSP+scriptlet way, waar je de lezer van je pagina blootstelt aan namen van parameters die eigenlijk private (intern) zouden moeten zijn voor het impliciete 'component' wat je probeerd te maken. Dan ga je opeens meerdere testen doen op de variable, maar door alle andere coden op de page zie je niet meteen dat het een validatie betreft. Soms is er ook wat meer logica nodig dan alleen een simpele if test. De clutter die dat veroorzaakt is vrij groot.
Jsf duwt helemaal niemand in de juiste richting. Dat is nog altijd de programmeur.
JSF doet dat wel degelijk. In JSP + scriptlets (of PHP) is de sky the limit. Je hebt de ultieme vrijheid. Helaas kunnen de meesten programmeurs niet zo goed met die vrijheid om gaan. In JSF heb je zowieso al een scheiding tussen je layout, je navigation rules, en je busines logic.
Een programmeur die nu de gehele filosofie van een jsf als bagage bij zich moet hebben.
Gelukkig is die "filosofie" dan wel vrij standaard, namelijk gewoon het MVC model met daaraan gekoppeld de logische Composite en Observer design patterns. Een hele mond vol met technische termen, maar in de praktijk werkt het erg makkelijk. Bijna elke desktop toolkit is opgebouwd rond deze 3 hoekstenen en miljoenen programmeurs werken hier mee. Het is ook voortgekomen uit jarenlange eerdere ervaring met andere programmeer modellen.
Toen web applicaties in kwamen was er helaas niet direct support voor deze manier van ontwikkelen. Dat kwam voornamelijk omdat het web eigenlijk helemaal niet bedoeld was om "web applicaties" te ondersteunen. Het programmeer model was dan ook een flinke stap terug.
Maar dit argument geldt dan ook voor een willekeurig in te vullen framework.
Als dat willekeurige framework gebundeld was met standaard Java EE wel, anders niet. 'Toevallig' is JSF gebundeld met standaard Java EE en daarmee de eerste en makkelijkste keuze voor iemand.
Ik heb eens in een hobby project geswitched van jsp naar velocity. Geen probleem. Maar even zonder dolle, wisselen van implementatie is echt een zwaar overated feature.
Wisselen van een gehele JSF implementatie zul je niet zo snel doen, maar het is veilig om te weten dat er meedere vendors voor dezelfde spec zijn.
Dat was echter niet waar het punt om ging. Jij stelde dat je ipv wisselen tussen frameworks, bij JSf moet kiezen tussen componenten libs. Dat is echter zeker niet hetzelfde. Bij een framework wissel (bv tapestry naar webwork) moet je -alles- wisselen. Bij componenten kun je gewoon specifieke componenten uit diverse libs door elkaar heen gebruiken. Dat kan en is nadrukkelijk geen bad practice. Sterker nog, het is de hele reden waarom er een componenten spec is; een universele API om componenten samen te laten werken.
Je kunt gewoon de datatable van tomahawk met de inputtext van de RI gebruiken en daaronder nog de progressbar uit de BP lib.
Geen probleem...
De voordelen van een universele componenten spec.
Ga jij maar eens proberen om op 1 pagina Struts, WebWork en Wicket samen te laten werken. Dat is niet alleen moeilijk, het is dikwijls ook nog eens onzinnig en wordt door velen gezien als een bad practice.
Conclusie: kiezen tussen frameworks is nadrukkelijk
niet hetzelfde als kiezen tussen component libs.
It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.