Repository pattern implementering i PHP

Tags:    patterns php

Er der nogle der har, har set eller bare kender til en god implementering af et Repository pattern i PHP. Synes ikke rigtig at jeg kan finde hverken frameworks eller sjove eksempler på dette.



4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt -1 karma
Sorter efter stemmer Sorter efter dato
M'et i din MVC står for model, det vil sige at det er din klasse som eks. en Bil eller en Bruger. Et repository pattern er et pattern hvor du har dit database abstraktionslag i. Det vil sige at du fra dit repository pattern henter en liste af biler, eller en liste af brugere, gemmer, opdaterer og håndterer alt omkring adgang til databasen. Grunden til at dette er afkoblet fra din model er at det ikke er ønskeligt at din model skal kende til database og dens implementering. Du vil samtidig have en høj binding i din klasse, så metoder som load, save osv. hører ikke hjemme i en model.

Hvis du skal sammenligne med MVC, så er repository pattern nærmere en del af C'et

For at svare på dit spørgsmål: Det skulle være muligt at oprette nogle generelle klasser i PHP, som kan levere en liste af objekter. En repository klasse ser typisk således ud:

public class BilRepository
{
List<Bil> LoadAllBiler();
Bil LoadBil();
void SaveBil(Bil b);
void DeleteBil(Bil b);
}

nu ved jeg godt det ikke er PHP syntaks, men ideen er at du så kun skal lave en instans af klassen BilRepository og så have adgang til de metoder som eksempelvis dem ovenfor. Dit BilRepository tager sig så af alt kommunikationen med databasen. Man kan udvidde ovenstående repository med alle dem man vil fx. LoadAllBilerFromUser(int userid) osv. Bemærk at der i ovenstående mangler en update, det er fordi jeg typisk laver samme funktionalitet i min Save metode, således jeg kigger på dens id om det findes, hvis det gør det, så er det en opdate. Ellers er det en insert.



Indlæg senest redigeret d. 18.03.2011 09:12 af Bruger #2730
Tak for forklaringen, det giver de artikler jeg har kigget på lidt mere mening. :) Jeg beklager at jeg hermed ikke kan besvare trådstarters spørgsmål.



Det er en god forklaring du kommer med der. At lave en implementing af dette pattern er ikke den store hurdle. :) Det hvor det kunne blive interessant er at lave en form for abstraktion af det.
Det skal ses lidt som et forsøg på at optimere udviklingsprocessens for simple CRUD systemer, som senere kan udvides til hvad som helst. Uden at være afhængig af et hav af forskellige special interfaces eller -klasser.

Lidt ærgeligt, at man ikke ser mange af denne slags implementationer...



Hvordan adskiller et repository pattern sig fra ganske "gammeldags" databaseabstraktionslag/modeller? Med andre ord, hvad er forskellen på et "repository pattern" og M'et i MVC?



t