Overordnet opbygning af Patch CMS med MVC
Patch er opbygget over MVC designmønsteret.Hvad er MVC

Et kort eksempel på et MCV design
Vi har en model, som er vores temperatur. Den kan vi så vise i forskellige views, her grader Celsius og Fahrenheit, man kunne også tilføje Kelvin. Hvis der på et tidspunkt kommer en ny skala, kan vi implementere et nyt view i stedet for at skrive hele systemet om. Controldelen er den del, der sørger for, at temperaturen er opdateret, dvs. man kan have en person eller et elektronisk termometer til at aflæse temperaturen og indlæse den i vores control, der så opdaterer de forskellige views. For mere information om MCV se GoogleMVC i Patch

Model og Control i Patch
I en webapplikation er det ikke nødvendigt for control at opdatere de forskellige views. Dette bunder i, at hele systemet oprettes, hver gang der bliver forespurgt en side, så views har altid den nyeste information fra systemet, og den information kan ikke ændres, uden at der bliver forespurgt en ny side. Model/Control delen i Patch består af elementerne i figuren:

Undersystemer
Fordelen ved undersystemerne er, at de lægger et vist niveau af abstraktion ind i systemet.
Database:
Patch benytter MySQL som database backend, men fordi interfacet til databasen er et undersystem, kan man uden problemer skifte til en anden backend, som fx PostgreSQL eller Oracle. Hvis man har rigtigt mange besøgende på ens side, er det også muligt at få undersystemet til at bruge master/slave princippet med databaser, hvor ændringer skrives til master, og data trækkes ud fra flere forskellige slavedatabaser for at fordele presset på serverne. Alt sammen helt gennemsigtigt for plugins, der bruger systemet.
Log:
Når man har så stort et system, kan det være omfattende at spore, hvor der er noget, der er gået galt. Derfor bør man have et system, der kan logge fejl i systemet. Når der sker en kritisk fejl, kan systemet i stedet for at gå ned og vise brugeren en uforståelig fejlmeddelelse genere en fejlside og give web-masteren besked om problemet. Ved mindre kritiske fejl er det også en god ide at kunne slå systemet i debug mode, så den logger alt, hvad der sker, så det er muligt at se, hvor det går galt. Logsystemet bliver derfor brugt af både plugins og de andre undersystemer.
Session:
Er ansvarlig for at opretholde en session med brugeren. Plugins kan så, hvis de ønsker det, gemme sessionsorienteret data og få det frem igen ved næste sideforespørgsel. Et eksempel er brugersystemet, der opretter en bruger objekt med information om brugerens rettigheder. Sessionsdata er delte, så andre plugins også kan tilgå data, dette betyder, at nyhedspluginen fra før ikke behøver at have sit eget brugersystem, men kan bruge det system, som brugersystem pluginen allerede har oprettet. [b]Plugin:[/b] Dette undersystem har ansvaret for, at de forskellige plugins bliver initialiseret, kørt og lukket ned. En plugin har mulighed for at dele objekter via sessionssystemet, når de bliver initialiseret. Når objektet er delt, har andre plugins inklusiv den selv mulighed for at benytte dette objekt, når pluginen bliver kørt. Når en plugin har kørt, samler pluginsystemet det XML, der er blevet genereret. Efter alle plugins er kørt, bliver alt XML samlet og videregivet til vores View gennem Core.Plugins
Som man nok kan gætte fra beskrivelsen af de forskellige undersystemer, kan Patch ikke rigtig noget uden plugins. Dette giver et utroligt niveau af fleksibilitet i og med, at vi kan skrotte alle plugins og lave et helt andet system samtidig med, at vi beholder den stærke backend. Plugins står derfor for alt i Patch. Af funktioner i plugins kan nævnes, banner skifter, billede galleri, tagwall, bbl tekst parser, brugersystem og mange andre.View i Patch
Når alle plugins har kørt, og alt XML er genereret, skal vores view lave noget, som brugeren kan se, dette "noget" er så XHTML/CSS. Måden, det bliver genereret på, er ved hjælp af en XSLT fil. XSLT er beregnet til at lave XML om til en anden form for XML, i dette tilfælde XHTML. De fleste XSLT systemer kan dog indstilles til at generere HTML 4.1 i stedet for. I stedet for XSLT kan man benytte XSL, der kan generere næsten hvad som helst, bl.a. billeder eller pdf data. Så repræsentationen af data er fuldstændigt uafhængigt af selve kernen i systemet.Konklusion
Patch kan tilpasses mange forskellige scenarioer, og viewdelen er meget rettet imod browser-understøttelse af fremtidige teknologier. Pluginunderstøttelsen gør, at man kan benytte Patch som et framework til næsten alle typer af webapplikationer. På et tidspunkt bliver XSLT transformation på klientsiden sandsynligvis mere stabilt, end det er nu. Når det sker, kan man flytte XSLT transformationen til klienten og derved spare en del server-ressourcer. Man har også mulighed for at bruge CSS til at præsentere ens XML med, så man helt kan undgå XSLT og derved spare en del båndbrede. Men både CSS og XSLT metoderne har indtil videre samme problemer. De er ikke understøttet i andet end de nyeste browsere, og understøttelsen er ikke helt ens.
Frederik Sørensen 15/01-2005