Hjælp til strukturing/optimering?

Tags:    php

<< < 12 > >>
Hej alle gæve udviklere,

jeg er i gang med at udvikle min egen MySQL/MySQLi klasse, der vælger MySQLi hvis det er tilgængelig og mysql hvis det ikke er. Er ingen dele tilgængelige så kommer den med fejl.

Jeg har en variabel der gemmer hvilken af databaserne der skal bruges.

Min løsning for hvordan den skal bruge det ene eller andet ser sådan ud.

Fold kodeboks ind/udKode 


Hvad kan jeg gøre for at gøre det optimalt eller ville det fungere fint i længden?



14 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Nu er det selvfølgelig lidt svært at se ud fra det eksempel, men sådan her ser min aktuelle klasse ud.

Fold kodeboks ind/udPHP kode 


Det giver et lidt bedre billede af hvad jeg gør.


I længden ville al den if, else programmering nok tage en del af serverens tid. Hvad med at lade brugeren selv bestemme hvilken database han vil bruge, og så opbygge to klasser. En til hver af database mulighederne og så måske arver fra en database klasse?



Det er nemlig det jeg tænkte på, for der vil komme en del switch og jeg kunne godt ønske at der måske var en mere effektiv måde. Men jeg aner ikke om det er langsomere at bruge switch i forhold til if-else, da jeg aldrig har haft brug for at overveje det.

Det gør sig også gældne med udskrivning af fejl. Måske skulle jeg lave noget custom error handling for at få mindre if-else.

custom error handling er en god idé.

Men, if-sætningers performance-krav er altså ikke så slemt, at du skal opbygge hele din arkitektur ud fra hvor mange af dem du har. Bare hav det en smule i baghovedet mens du koder :)



MySQLi er ikke mere sikkert end MySQL driveren i den forstand at man kan lave de samme dumhedsfejl med begge drivere.

MySQLi er en integreret driver til PHP hvor MySQL drivere er en udvidelse. MySQLi driverens force ifht. MySQL er muligheden for prepared statements og hvis man kigger den vej, er det mere sikkert, da MySQLi laver autoescaping på alt det "farlige". Det gør den ikke ved alm. statements.

Den mest omtalte forskel der er på de to drivere, er deres integration. Da MySQL er et modul/en udvidelse til PHP sige det at være langsommere til at afvikle set i forhold til MySQLi, da denne driver er udviklet specifikt til PHP og kommunikationen med databasen. Om der er hold i det ved jeg ikke. Men jeg ved at prepared statements er en super idé og fungerer optimalt for mit vedkommende.

Selvom der ikke rigtig er nogen grund til det, er det en udemærket idé at udvikle to forskellige komponenter til hhv. MySQL og MySQLi. Det giver rig mulighed for at lære hvordan man laver abstraktionsklasser mm.
Men det er dumt at lave et interface paradigm der beskriver strukturen for en MySQL klasse og et andet interface der beskriver strukturen for en MySQLi klasse. Det skal være mere generelt, så det kan bruges flere steder. Så kan interfacet måske hedde "DatabaseInterface".

...og nu gider jeg ikke skrive mere. :)




Det vil såmend fungere fint nok, skulle jeg mene.

Selvom jeg nok ville validere hvilken forbindelse der skulle bruges, og derefter forbinde, i ét hug. Istedet for først validere, så smide ind i en variabel, og så validere variablen, og så forbinde. Det er alligevel nogle led man skærer bort :)



Nu er det selvfølgelig lidt svært at se ud fra det eksempel, men sådan her ser min aktuelle klasse ud.

Fold kodeboks ind/udPHP kode 


Det giver et lidt bedre billede af hvad jeg gør.



Indlæg senest redigeret d. 19.09.2008 21:58 af Bruger #6559
Ja det har jeg skam også overvejet, men jeg har læst mig til at MySQLi skulle være mere sikkert, så derfor synes jeg at jeg ville bygge en klasse der så brugte det sikreste at bruge uden at brugeren skal tænke over det.



Ah, ja. Med den indfaldsvinkel er min fremgangsmåde nok næppe ønskelig.

Isåfald synes jeg, din fremgangsmåde er fin. Du skal som Jakob er inde på, være opmærksom på hvor ofte du bruger if-sætninger - men jeg tvivler på det er noget der sænker den her klasse.



Det er nemlig det jeg tænkte på, for der vil komme en del switch og jeg kunne godt ønske at der måske var en mere effektiv måde. Men jeg aner ikke om det er langsomere at bruge switch i forhold til if-else, da jeg aldrig har haft brug for at overveje det.

Det gør sig også gældne med udskrivning af fejl. Måske skulle jeg lave noget custom error handling for at få mindre if-else.



Indlæg senest redigeret d. 19.09.2008 22:40 af Bruger #6559
Godt så. Så vil jeg prøve at arbejde videre med det, så må vi jo se hvad der kommer ud af det :D

Jeg fordeler point i morgen, så hvis der kommer andre så kan de stadigvæk nå at få indført et ord.



Jeg ville nok vælge en anden løsning end hele tiden at tjekke:

Fold kodeboks ind/udKode 


På den måde skal du oprette et objekt af MySQL klassen som vælger at oprette et objekt af enten MySQLiImplementation eller MySQLOldImplementation klassen som den delegerer al arbejdet til.



<< < 12 > >>
t