Ospravedlnenie sa prijima ;-)
Ale vysvetlite mi prosim, co za hovado urobilo v Struts blog, co ma 4.1MB a 155 suborov? Nemam dovod sa zastavat Struts, ale to porovnanie je velmi subjektivne a pritiahnute za vlasy. Urobit v hociakom frameworku 50MB webovu aplikaciu dokaze hocikto. Urobit to iste na 50KB uz chce niekoho, co ten framework ovlada trochu viac a vie co robi.
Něco jsem v Seaside dělal, tak jenom pár postřehů. Musím se přiznat, že němám přehled jak se to dělá v jiných frameworks. Takže nejdříve šablony. Ty prostě skutečně nejsou, 90% všeho se generuje pomocí kódu, který poskládá HTML stránku. Takže např.
renderContentOn: html html paragraph: [ html text: 'Hello world' ].
vyrobí <p>Hello world</p>. Podívejte se na WAAbstractHtmlBuilder co všechno se dá podniknout. Pokud nějaká značka chybí, tak se dá udělat třebas:
html tag: 'strong' do: [html text: 'Hello world'].
což vyrobí <strong>Hellow world</strong>. Jsme v OOP, takže není problém si podědit tenhle builder a vyrobit vlastní, kde budeme mít vlastní specialitky. Můj vlastní dělal překlad vkládaného textu. Otázky designu co se týče barvy, písma, všechno je ponecháno na CSS a taky je to ještě ve vývoji.
Další věc je logika. Např. každá komponenta (ta vaše vlastní taky) umí něco jako
self inform: 'Jsem v pohode'.
Tohle vykreslí stránku s daným textem a jedním tlačítkem OK. Je to už předefinováno, ale tím že ve smalltalku je všechno dost plastický, tak se to dá upravit nebo podědit. Takže třebas stránka kde je odkaz co vede na nějakou akci je:
renderContentOn: html html paragraph: [ html anchorWithAction [self inform: 'Jsem v pohode'] text: 'Cau, jak se mas' ].
Tohle udělá odstavec s linkou která vede "někam" a po jejím kliknutí se objeví stránka s tlačítkem OK a to vede zpět. Teď například nějaký hlasovátko:
renderContentOn: html html anchorWithAction: [self answer: #yes] text: 'Jsem za'. html break. html anchorWithAction: [self answer: #no] text: 'Jsem proti'. html break. html anchorWithAction: [self answer: #dunno] text: 'Nevim'. html break. ].
Mít takovou komponentu v proměnný "hlasovac", tak stačí jí zavolat odněkad z programu:
html anchorWithAction: [vysledek := self call: hlasovac] text: 'Co si myslite o....'
Samozřejmě i když je tady snaha o lineární flow control, pořád jsme v zajetí request-response, takže musí mít napaměti kdy ta aplikace se bude vykreslovat kdy podnikne nějakou akci a opět dojde k vykreslování.