You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Koodin yleinen laatu hyvää, toiminnallisuus jäsennelty MVC-arkkitehtuurin mukaisesti, muutamia poikkeuksia lukuun ottamatta. Esimerkiksi lib/controllers/api.js kontrolleri näyttäisi sisältävän SQL-kyselyn. Ja sessions.js controlleri näyttäisi kovakoodaavan ihmeellisiä arvoja resUser olioon.
Käyttäjien luomisen CRUD näyttäisi toimivan lähes moiteetta, kuitenki email kenttää ei koskaan käsitellä tai talleteta mihinkään, eikä virheellisen nimen (käyttäjätunnus on jo olemassa) syöttämisestä rekisteröityessä ilmoiteta millään tavalla.
Käyttäjältä tullut data bindataan järkevästi kaikissa paikoissa kyselyihin, välttäen SQL-injektiot. Kyselyissä on kuitenkin käytetty paljon subqueryja ja kovakoodattuja merkkijonoja, joita ainakin itse pitäisin huonona käytänteenä. Itse välittäisin halutun kategorian nimen/id:n metodille parametrina ja subqueryistä pääsee eroon esimekriksi JOIN-lausekkeella. Esimerkiksi tuotteiden listaus sivun kyselyn voisi muuttaa JOIN-lauseketta käyttävään muotoon SELECT products.* FROM categories JOIN products ON categories.id = products.category WHERE categories.name LIKE "Ruoka ja juoma".
Vertailtaessa merkkijonoja SQL-kyselyissä tulisi käyttää LIKE-operaatiota yhtäsuuruus-operaation sijaan. LIKE-operaatio osaa vertailla merkkijonoja joissa eri merkistö, kun taas = on bittitason vertailuoperaatio.
Schema sisältää puutteita lähinnä favorites taulussa, taulusta puuttuu muutama viitte toiseen tauluun, kentät ovat kuitenkin jo paikallaan. En myöskään asettaisi kaikkia tekstikenttiä TEXT tyyppisiksi, usein on järkevää rajoittaa esimerkiksi käyttäjätunnuksen pituutta tai tuotekategorioiden nimiä, koska mielivaltaisen pitkän merkkijonon esittäminen verkkosivulla esimerkiksi otsikossa voi rikkoa sivun layoutin täysin.
SQL-tietokannat ovat nykyään erittäin edistyneitä ja niiden avulla on esimerkiksi mahdollista suorittaa listan sekoittaminen sekä rajaaminen seuraavasti ORDER BY RANDOM() LIMIT 10;. Tietokannat tarjoavat nykyään oletuksena erittäin paljon erilaisia toimintoja,ja yleensä kannattaakin tutustua käytettävän tietokannan toimintoihin ennen niiden toteuttamista itse.
Erittäin siistin oloinen toteutus ja aivan mahtava sovellus. Ja vielä loppuhuomautuksena koodi on hyvin kommentoitua /* I'm so sorry *//* Please forgive me... */.
Koodin yleinen laatu hyvää, toiminnallisuus jäsennelty MVC-arkkitehtuurin mukaisesti, muutamia poikkeuksia lukuun ottamatta. Esimerkiksi
lib/controllers/api.js
kontrolleri näyttäisi sisältävän SQL-kyselyn. Jasessions.js
controlleri näyttäisi kovakoodaavan ihmeellisiä arvoja resUser olioon.Käyttäjien luomisen CRUD näyttäisi toimivan lähes moiteetta, kuitenki email kenttää ei koskaan käsitellä tai talleteta mihinkään, eikä virheellisen nimen (käyttäjätunnus on jo olemassa) syöttämisestä rekisteröityessä ilmoiteta millään tavalla.
Käyttäjältä tullut data bindataan järkevästi kaikissa paikoissa kyselyihin, välttäen SQL-injektiot. Kyselyissä on kuitenkin käytetty paljon subqueryja ja kovakoodattuja merkkijonoja, joita ainakin itse pitäisin huonona käytänteenä. Itse välittäisin halutun kategorian nimen/id:n metodille parametrina ja subqueryistä pääsee eroon esimekriksi JOIN-lausekkeella. Esimerkiksi tuotteiden listaus sivun kyselyn voisi muuttaa JOIN-lauseketta käyttävään muotoon
SELECT products.* FROM categories JOIN products ON categories.id = products.category WHERE categories.name LIKE "Ruoka ja juoma"
.Vertailtaessa merkkijonoja SQL-kyselyissä tulisi käyttää LIKE-operaatiota yhtäsuuruus-operaation sijaan. LIKE-operaatio osaa vertailla merkkijonoja joissa eri merkistö, kun taas = on bittitason vertailuoperaatio.
Schema sisältää puutteita lähinnä favorites taulussa, taulusta puuttuu muutama viitte toiseen tauluun, kentät ovat kuitenkin jo paikallaan. En myöskään asettaisi kaikkia tekstikenttiä TEXT tyyppisiksi, usein on järkevää rajoittaa esimerkiksi käyttäjätunnuksen pituutta tai tuotekategorioiden nimiä, koska mielivaltaisen pitkän merkkijonon esittäminen verkkosivulla esimerkiksi otsikossa voi rikkoa sivun layoutin täysin.
SQL-tietokannat ovat nykyään erittäin edistyneitä ja niiden avulla on esimerkiksi mahdollista suorittaa listan sekoittaminen sekä rajaaminen seuraavasti
ORDER BY RANDOM() LIMIT 10;
. Tietokannat tarjoavat nykyään oletuksena erittäin paljon erilaisia toimintoja,ja yleensä kannattaakin tutustua käytettävän tietokannan toimintoihin ennen niiden toteuttamista itse.Erittäin siistin oloinen toteutus ja aivan mahtava sovellus. Ja vielä loppuhuomautuksena koodi on hyvin kommentoitua
/* I'm so sorry */
/* Please forgive me... */
.Tämän illan ateriana toimii delicious five-star™ meal!
The text was updated successfully, but these errors were encountered: