"Pena kommentoi Kallen tekemisiä 4 tuntia sitten."
"Mauri postasi uuden jutun hetki sitten."
Tämäntyyppistä uutisfeediä koetin tässä rakentaa ja kyseessä on itseasiassa aika monimutkainen ja mielenkiintoinen design-haaste.
Noin äkkiseltään tulee mieleen 2 päävaihtoehtoa:
1) yksinkertaisesti logataan viestejä html-muodossa omaan tauluunsa, josta ne sitten nykäistään esille.
Jes helppoa, paitsi että sellaiset viestit eivät enää luomisensa jälkeen päivity, joten jos esim. linkkien rakenne tai joku muu sisältöasia muuttuu, se ei päivity.
Myöskään ylläolevan kaltaista ajan esitystä ei voi tehdä, koska aikatiedot eivät päivity luotuihin viesteihin.
2) luodaan koko feedi dynaamisesti tietokannasta. Tässä tulee hieman arkkitehtuuriongelmia, koska symfony ei kovin notkeasti taivu hakemaan tietoja usemmasta taulusta ja lisäksi täytyisi renderöintivaiheessa ottaa aina selville, minkä tyyppistä tietoa ollaan näyttämässä ja mitä semanttisia lisälausahduksia siihen tulee lisätä. Myöskään kaikki mitä sovelluksessa voi mahdollisesti tapahtua ei näy suoraan tietokantatauluista ellei sitä erikseen logata omaan tauluunsa.
En tiedä miten facebook ja muut sen tekevät (saa kertoa jos tietää), mutta itselle tulee mieleen jonkinlainen puolittainen toteutus, missä viestien rungot haetaan jostain ja log-tiedoksi tallennetaan id-tietoja tietokannasta. Tyyliin kommenttipostaus näyttäisi logattuna tältä:
id:1, kommentoija_id:5, kommentti_id: 3, kommentoitava_id: 7, viestityyppi: kommentointi
Josta tietämällä yhteyden(viestityyppi) pystyy säveltämään asianmukaisen viestin uutisiin.
Mutta hiukan monimutkaisempaa kuin miltä se vaikuttaa(jostain syystä kaikki semantiikkaan ja ohjelmointiin liittyvä on).