| | | | |
| |||||||
| Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene |
|
| | LinkBack | Themen-Optionen | Bewertung: |
| | |
| Neuer Benutzer Registriert seit: 16.06.2011
Beiträge: 4
PHP-Kenntnisse: Anfänger ![]() | Hallo zusammen, ich habe mein Problem bereits in der Contao-Community geschildert, allerdings kann mir dort niemand so recht helfen. Und da es sowieso weniger ein Contao spezifisches Problem, sondern eher eine Designfrage ist, versuche ich es hier ![]() Contao-Extensions bestehen i.d.R. aus einer Klasse, in denen bis auf die View alles zusammengewürfelt wird. Ich arbeite nun an einer Schnittstelle zu einer komplexen Datenbank, für die die MySQL-Abfragen entsprechend umfangreich sind. Damit der Code übersichtlich bleibt suche ich nun nach einer Möglichkeit, die Abfragen auszulagern. Ich habe mir überlegt, für jede Gruppe von Abfragen ein eigenes Model zu schreiben. Z.B. alle Abfragen betreffend Dokumente/Downloads werden in einer Klasse DownloadsModel gesammelt. Analog alles was mit Kontakten zu tun hat in einer ContactsModel usw. Irgendwie habe ich aber damit das Gefühl, dass es bis auf die Umsetzung nicht mehr viel mit OOP zu tun hat. Bin daher für jegliche Vorschläge/Anregungen/Ideen dankbar ![]() Beispiel-Model: PHP-Code: PHP-Code: Leider muss ich vor jeder Abfrage an eine externe Datenbank die Verbindung neu aufbauen (und danach wieder zurück), da Contao keine zwei Verbindungen gleichzeitig verwalten kann. Hätte ich mit dem Auslagern in eine Klasse einiges an Performanceverlust? Eine Alternative wäre, die Abfragen in Funktionen auszulagern, denen dann jeweils die Verbindung als Parameter übergeben wird. Aber das finde ich noch unschöner. Mfg sans |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | ||
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | 1. Ist die Frage drüben gerade mal 1 1/2 Tage alt. Zitat:
2. Findest Du wohl eher nen Entwickler für Contao in Contaoforum, als im Entwicklerforum jemanden, der zufällig mit Contao arbeitet 3. Ist die Frage sehr allgemein gehalten. Da ich Contaos Struktur nicht kenne, weiß ich nicht was man da groß antworten sollte (und kennte*) ich sie, würde sich daran vermutlich wenig ändern), außer: na mach doch. *) igitt
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- | |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() | Zitat:
| |
| | |
| | |
| Benutzer Registriert seit: 25.03.2011
Beiträge: 52
PHP-Kenntnisse: Fortgeschritten ![]() | Naja, schau dir mal ein paar PHP-Frameworks an. Da hat jede Tabelle auch ihre eigene Klasse. Deine Idee ist schon gut und macht sicherlich Sinn.Allerdings jedes mal die Datenbank-Verbidung neu aufzubauen halte ich für etwas unglücklich gelöst. Warum lagerst du das nicht in eine eigene Klasse aus, die sich wirklich nur um die Kommunikation mit der Datenbank kümmert?Die Klasse (ich nenn sie mal "Datasource") holst du dann in deine Models rein (z.B. der Dependency Injection). Somit muss die Verbindung nur einmal aufgebaut werden. Und solltest du mal die Datenbank wechseln musst du nur diese Klasse anpassen. Gruß, Max |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 02.09.2009
Beiträge: 1.020
PHP-Kenntnisse: Fortgeschritten ![]() | Was mich stören würde ist die Verwendung des Begriffs Model. Wenn da nur Abfragen drin stehen würde ich es nicht unbedingt als Model bezeichnen. Aber prinzipiell passt das schon.
__________________ Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de |
| | |
| | |
| Neuer Benutzer Registriert seit: 16.06.2011
Beiträge: 4
PHP-Kenntnisse: Anfänger ![]() | Hey vielen Dank für eure Antworten ![]() Wie es aussieht werde ich also in der Richtung bleiben. Ihr habt recht, ein perfektes Design ist nicht nötig und wahrscheinlich auch nicht möglich. Echte Namespaces sind eine gute Idee, da sowieso PHP > 5.3 auf dem Server läuft. "Namespaces" über Datei- bzw. Klassennamen möchte ich vermeiden, da eh schon alle Dateien (Vorgabe von Contao) im gleichen Ordner liegen müssen. Leider muss ich die Datenbankverbindung jedes mal neu aufbauen, da Contao nur eine Verbindung gleichzeitig verwalten kann. Aber eigentlich könnte ich auch selbst eine Verbindung herstellen. Die Contao Methoden wie execute() etc. sind ja eigentlich nur Wrapper für die PHP Befehle. Die vielen Connects drücken wahrscheinlich viel eher auf die Performance wie alles was mit OOP machbar ist Ich habe mir andere Frameworks angesehen: CakePHP und CodeIgniter machen es ähnlich wie mein Vorschlag. Von Zend konnte ich nichts konkretes finden. Und Flow3 und Symfony2 verwenden ein ähnliches System mit dem ich mich nicht auskenne. Wie nennt man das wenn PHP-Code über Kommentare (Flow3) oder mit use (Symfony2) gesteuert wird? Würde es ausreichen, wenn ich einfach in meinem BaseModel die Datenbankverbindung herstelle? Die Datenbank muss nicht austauschbar sein. Und wenn, würde es ja nicht ausreichen einfach nur die "Datasource" zu ändern, wenn ich in den Models direkt Mysqli-Funktionen verwende. Oder sehe ich das falsch? ![]() Mein Ziel ist es einfach ein sauberes Modul zu haben, das ggf. auch nach mir weiterentwickelt werden kann, ohne aber das ganze zu komplex werden zu lassen. D.h. irgendwelche eigenen DI-Container zu programmieren, oder fertige zu verwenden wäre mehr als Overkill ![]() @mquadrat: welchen Begriff würdest du stattdessen vorschlagen? Geändert von sans (17.06.2011 um 15:07 Uhr). |
| | |
| | ||
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- | |
| | |
| | |
| Neuer Benutzer Registriert seit: 16.06.2011
Beiträge: 4
PHP-Kenntnisse: Anfänger ![]() | Ja, aber ich muss nach der Abfrage bzw. spätestens vor der nächsten Abfrage für Contao (z.B. Navigation, User Auth etc.) wieder auf die Contao Datenbank zurückwechseln. Contao verwendet eine andere Datenbank wie die die ich aus meiner Schnittstelle ansprechen muss. |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] mit php generiertes js auslagern | outlaw | JavaScript, Ajax und mehr | 6 | 07.04.2011 10:34 |
| Best Practice: Datenbankabfragen | tarian | Software-Design | 21 | 21.01.2011 21:52 |
| ?section=xxx aus index.php auslagern ?? | lordcyphon | PHP Tipps 2009 | 11 | 07.11.2009 01:05 |
| [Erledigt] Tabellenlayout: Große Felder auslagern? | boernard | Datenbanken | 7 | 27.07.2009 14:03 |
| [Erledigt] For-Schleife für DB-Abfrage auslagern? | Sermon | PHP Tipps 2009 | 18 | 20.03.2009 19:14 |
| Funktionen auslagern | mafra | PHP Tipps 2008 | 10 | 15.03.2008 09:24 |
| Abfrage in Funktion auslagern - lohnt sich das? | tayke | Datenbanken | 4 | 15.11.2007 23:36 |
| Auslagern von Menü & Header | SoulDream | PHP Tipps 2008 | 3 | 07.11.2007 13:23 |
| DB-Verbindungsaufbau auslagern? | ark1707 | PHP Tipps 2008 | 1 | 12.09.2007 08:04 |
| Problem mit Javascript: lässt sich nicht auslagern | blinkster.de | HTML, Usability und Barrierefreiheit | 2 | 01.10.2005 15:20 |
| Programmteile auslagern | juhuwoorps | PHP Tipps 2005 | 16 | 14.03.2005 10:13 |
| Teile des Quellcodes auslagern | PHP Tipps 2005 | 13 | 23.02.2005 18:34 | |
| Klassenmethoden auslagern und includen | PHP-Fortgeschrittene | 16 | 20.01.2005 18:03 | |
| Funktionen auslagern und auf variablen zugreifen | Crypi | PHP Tipps 2004 | 3 | 14.10.2004 13:43 |
| KLasse auslagern funktioniert nicht | Crypi | PHP Tipps 2004 | 17 | 23.09.2004 16:16 |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| contao externe datenbank, contao datenbankabfrage, contao datenbank ändern, contao mysql abfrage, contao datenbank abfragen, contao datenbank abfrage, contao andere datenbank, contao ohne eigene datenbank, php-script contao mysql, contao eigene datenbank, contao model, php mysql query in funktionen auslagern, contao eigene datenbankabfrage erstellen, contao mysql query in php datei, contao externe php daten, view-abfrage in contao-db, php datenbankverbindung dauert, datenbank in ein separates tabellenblatt auslagern, contao datenbankschnittstelle kassensystem, jede abfrage einzelne klasse |