Verwijderd schreef op donderdag 10 april 2008 @ 15:29:
ik heb tot nu toe veel tips gekregen..dankjewel hiervoor.
ik ben zelf zo'n 4 jaar met php bezig. Veel geleerd en vind het leuk werk.
Echter wanneer ik nu stukken code zie die bijv. destijds gemaakt zijn.
denk ik toch; tsjah dat kan tegenwoordig(met m'n huidige php kennis) echt veel beter.
Maar ook dit is iets wat elke php'er zal tegenkomen.
Ik zal komende tijd goed nadenken over hoe het zal moeten.
Wanneer jullie aan een project beginnen, brengen jullie dan elke class/functie van het project van te voren in beeld?
Bijv.:
Class PaginaBeheer:
- functie pagina toevoegen
- functie pagina verwijderen
- functie pagina aanpassen
- functie pagina in menu verschuiven(hoger of lager in menu plaatsen.)
- functie pagina als subpagina maken
Okee, wat hieronder komt is waarschijnlijk voor de meesten van jullie bekend, maar omdat ik het idee heb dat TS het nog niet helemaal snapt, hieronder even mijn visie op bovenstaande.
Bij ons werken we gewoon volgens een vast stramien (wat ik meestal bij de wat grotere ontwikkelbureau's vind) en ook een methodiek die volgens mij iedere zelfrespecterende programmeur zou moeten gebruiken als ze bezig gaan met OO.
BusinessEntityLayer <-> Managementlayer <-> Presentation layer
Als je dat aanhoudt, kan je de helft van wat je nu vooraf zou willen bedenken al weglaten. Omdat een groot deel van je code direct duidelijk is.
Wij starten met het databasemodel (na functioneel en technisch ontwerp), daarna ontwerpen we de business-entity-layer: hierin staan je objecten (classes) zoals Page, User, Newsitem, whatever. Deze objecten zijn in 95% van de gevallen rechstreekse afspiegelingen van je datatables (je tabel tblPages heeft als cellen 'Name', 'Description' dan heeft je entity Page ook Name en Description als Property).
Vervolgens schrijf je in je managementlayer je translatie van entity naar database en andersom. Dus functies als PersistPage, RetrievePages, RetrievePageByID; deze retouneren altijd objecten van het type Page en verwachten dat ook altijd als input; een set translation classes kan deze dan weer omzetten naar datarow's etc. Hou dit altijd generiek, en ga geen dubbele functies schrijven (zoals PaginaToevoegen, en PaginaBijwerken; laat dat in je Managementlayer uitzoeken; je wilt namelijk zo min mogelijk businesslogic aan de frontend).
Ook moet je niet andere objecten gaan afhandelen in je PageManagement; dingen als omhoog/omlaag verschuiven in je menu moet je gaan doen in je MenuManagement; (met een tree als input/output ofzo en een PersistMenu functie om de wijzigingen weg te schrijven). De items in de tree zou je dan wel weer met functies als MoveUp en MoveDown kunnen uitrusten. Gebruik ook geen functie om een pagina een subpagina van een andere te maken; dat is namelijk geen eigenschap van een Page; gebruik hier dan je menu voor, of een andere business-entity.
Hierna kan je de presentatielaag schrijven, dus bijvoorbeeld je CMS; hierin zit geen (nauwelijks) logic, maar bevat alleen maar dingen als PersistPage(depagedieikaanhetbewerkenben) en RetrieveAllPages etc. Logic en database-afhandeling zitten dus nooit in je frontend.
My 2 cents; let op waar je verschillende dingen neerzet. Ga niet twee types door elkaar halen door menuhandling in je pagemanagement af te gaan vangen, etcetera. Hou het simpel en generiek; dan hoef je over 50% van je code niet meer na te denken!