2011-01-30, 20:26
#1
Hej alla!
Jag skapade en tråd för länge sedan som heter OOP-leken: Dags att lära oss OOP!, men den tog aldrig riktigt fart, så istället tänkte jag att vi startar på ny kula och har ett ordentligt projekt att jobba med.
Vem som helst får självklart hoppa in - om det så gäller att skriva en enskild funktion, skapa en hel klass eller kanske bara tipsa om saker.
Tanken är att andra ska ta del av koden, samtidigt som man skriver om vad man gör, hur man gör det och varför här i tråden, så att andra kan lära sig.
Jag tänkte att första projektet ska bli en sida med böcker - typ en bokhandel. Men vi kan börja med det grundläggande för att sedan bygga på. Detta är ju dessutom kraftfullheten med OOP, att man inte skriver spaghettikod gör att man enkelt kan lägga till nya funktioner utan att behöva skriva om milslånga skript.
Vad behövs då?
Vi börjar med en databas.
En tabell som håller i alla böcker. Varje bok har självklart ett unikt ID, men jag tycker att man även ska använda ISBN-nummer. Med hjälp av detta kanske man senare kan hämta information beroende på ISBN vid inregistrering av en ny bok - så att man sparar tid vid inregistrering.
Vi bör även komma överens om en namnstandard, när det gäller tabeller (och självklart på klasser och metoder). Mitt förslag till tabellnamn är att varje tabell ska hantera ett objekt, som då får objektets namn i plural. Varje fält har sedan objektets namn i singular följt av vad fältet ska innehålla. Dessutom ska allt vara på engelska.
Inget är ju skrivet i sten, men det där kan vara grunden. Nu har man möjlighet att lägga in böcker i databasen för att kunna skriva ut dem på hemsidan.
Vad behöver vi då i PHP-väg?
Vi börjar med ett database abstraction layer (Googla om ni inte känner till det). Att hoppa direkt på ett ORM kanske känns onödigt. Detta grundas helst på MySQLi, för att det är säkrare.
Tanken är att man enbart ska extenda klasser till databas-klassen och använda uppkopplingen direkt i metoder - inte på något annat sätt (d.v.s. inte kladda ner "viewen" med databaskopplingar).
Denna ska ha en construct och en destruct. Server, användarnamn osv tar vi helst från en global konfiguration, som ligger separat från klassbiblioteket. Utöver det måste man kunna skicka SQL-frågor.
Men mot MySQLi kan man göra det på olika sätt - prepared statements, multi query etc (för olika ändamål). Hur man ska lösa detta kan vi komma fram till i tråden.
Efter det behöver vi en klass som hanterar böckerna.
Förstås en "getBook" och en "setBook", där "getBook" hämtar ut en specifik bok och setBook hanterar inregistrering. En "listBooks" kan vara på sin plats.
Mer än så tycker inte jag vi behöver börja med. Får vi detta att fungera bra, optimerar vi allt och får det att fungera ännu bättre. Sen går vi vidare, med kanske en kundkorg, så att man kan lägga ner saker i kundkorgen.
Efter det en sätt att skicka beställningar - och förstås en tillhörande adminpanel där man kan hantera böcker, beställningar osv. Förvisso behövs adminpanelen för att registrera in böcker från första början, så det ska vara med!
Ja som ni ser är det mycket man ska tänka på när man bygger i stor skala - och det här är ändå inget jätteprojekt (hittills).
Vi börjar med att planera så mycket som möjligt, får fram något slags "regelverk" för hur uppdateringar osv ska ske. Kanske använda något slags versionshanteringssystem.
Spåna på!
Jag skapade en tråd för länge sedan som heter OOP-leken: Dags att lära oss OOP!, men den tog aldrig riktigt fart, så istället tänkte jag att vi startar på ny kula och har ett ordentligt projekt att jobba med.
Vem som helst får självklart hoppa in - om det så gäller att skriva en enskild funktion, skapa en hel klass eller kanske bara tipsa om saker.
Tanken är att andra ska ta del av koden, samtidigt som man skriver om vad man gör, hur man gör det och varför här i tråden, så att andra kan lära sig.
Jag tänkte att första projektet ska bli en sida med böcker - typ en bokhandel. Men vi kan börja med det grundläggande för att sedan bygga på. Detta är ju dessutom kraftfullheten med OOP, att man inte skriver spaghettikod gör att man enkelt kan lägga till nya funktioner utan att behöva skriva om milslånga skript.
Vad behövs då?
Vi börjar med en databas.
En tabell som håller i alla böcker. Varje bok har självklart ett unikt ID, men jag tycker att man även ska använda ISBN-nummer. Med hjälp av detta kanske man senare kan hämta information beroende på ISBN vid inregistrering av en ny bok - så att man sparar tid vid inregistrering.
Vi bör även komma överens om en namnstandard, när det gäller tabeller (och självklart på klasser och metoder). Mitt förslag till tabellnamn är att varje tabell ska hantera ett objekt, som då får objektets namn i plural. Varje fält har sedan objektets namn i singular följt av vad fältet ska innehålla. Dessutom ska allt vara på engelska.
Kod:
--- tabell "books" --- bookID publisherID bookISBN10 bookISBN13 bookName bookWriter bookTranslator bookDesigner (formgivare, mer passande ord?) bookLanguage bookYear (utgivningsdatum) bookMonth (utgivningsdatum) bookDay (utgivningsdatum) bookEdition (utgåva, upplaga) bookPages --- tabell "publishers" --- publisherID publisherName publisherCountry
Inget är ju skrivet i sten, men det där kan vara grunden. Nu har man möjlighet att lägga in böcker i databasen för att kunna skriva ut dem på hemsidan.
Vad behöver vi då i PHP-väg?
Vi börjar med ett database abstraction layer (Googla om ni inte känner till det). Att hoppa direkt på ett ORM kanske känns onödigt. Detta grundas helst på MySQLi, för att det är säkrare.
Tanken är att man enbart ska extenda klasser till databas-klassen och använda uppkopplingen direkt i metoder - inte på något annat sätt (d.v.s. inte kladda ner "viewen" med databaskopplingar).
Denna ska ha en construct och en destruct. Server, användarnamn osv tar vi helst från en global konfiguration, som ligger separat från klassbiblioteket. Utöver det måste man kunna skicka SQL-frågor.
Men mot MySQLi kan man göra det på olika sätt - prepared statements, multi query etc (för olika ändamål). Hur man ska lösa detta kan vi komma fram till i tråden.
Efter det behöver vi en klass som hanterar böckerna.
Förstås en "getBook" och en "setBook", där "getBook" hämtar ut en specifik bok och setBook hanterar inregistrering. En "listBooks" kan vara på sin plats.
Mer än så tycker inte jag vi behöver börja med. Får vi detta att fungera bra, optimerar vi allt och får det att fungera ännu bättre. Sen går vi vidare, med kanske en kundkorg, så att man kan lägga ner saker i kundkorgen.
Efter det en sätt att skicka beställningar - och förstås en tillhörande adminpanel där man kan hantera böcker, beställningar osv. Förvisso behövs adminpanelen för att registrera in böcker från första början, så det ska vara med!
Ja som ni ser är det mycket man ska tänka på när man bygger i stor skala - och det här är ändå inget jätteprojekt (hittills).
Vi börjar med att planera så mycket som möjligt, får fram något slags "regelverk" för hur uppdateringar osv ska ske. Kanske använda något slags versionshanteringssystem.
Spåna på!