php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 20.01.2011, 21:31  
Erfahrener Benutzer
 
Registriert seit: 17.01.2009
Beiträge: 150
Curcio kann nur auf Besserung hoffen
Standard MVC, Datenbankabfragen und Performance

Hallo zusammen,

mal angenommen wir haben folgendes System (beispielhaft):

- User (Lehrer, Schüler)
- Klassen
- Fächer

Nun soll auf einer Seite jede Klasse samt der Schüler, Unterrichtsfächer und dem Lehrer ausgegeben werden. Es handelt sich um ein MVC System und wir wollen natürlich die Modelfunktionen nutzen.

Beispiel:
- Models: Class, ...
- Functions: create(), delete(), update() get_list()...

Wie würdet ihr in einem solchen Fall vorgehen?

Gedanken:
Wenn ich die einzelnen Modelmethoden nutze, würde ich viel zu viele MySQL Abfragen starten und müsste zusätzlich im Controller die Daten in einer Form bringen, sodass ich in der View damit gescheit arbeiten kann. Mit einer oder wenigen gezielten SQL Abfrage und passenden JOINs kann ich die Ausgabe bestmöglich passend erhalten.

Die Fragen die sich mir bei der Arbeit nach MVC Konzept stellen liegen halt öfters im Bereich:

- Wie schaffe ich es Modelmethoden möglichst allgemeingültig zu halten aber gleichzeitig nicht zu viele Daten, zu viele Abfragen zu starten?
- Wann erstelle ich einen eigenen Controller (in diesem Fall einen für die Klassenliste)?
- ...

Weiteres Beispiel:
Oftmals ist es ja nunmal so, dass man in bestimmten Tabellen via Ids Verknüpfungen zu anderen Tabellen hat. Man kann auch in einer Rechnungsansicht nicht einfach IDs ausgeben, sondern es sollen natürlich die Benutzerinformationen (Name, ...) angezeigt werden.

Vielen Dank!!
__________________
..[.}}.°.°.{{.]..
Curcio ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.01.2011, 21:45  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,

also zunächst mal: Class ist ein "reserved word" in PHP, deshalb immer schön mit Namespace oder Prä- oder Postfix arbeiten -> ClassModel.
Deine Funktionen sind schön und gut, CRUD nennt sich das, aber dabei muss es ja nicht bleiben!Du kannst deiner ClassModel-Klasse ruhig Methoden verpassen, die genau auf deine Wünsche zugeschnitten sind.

PHP-Code:
<?php
$classId 
= (int)$_GET["id"];
// Klasse holen
$class $classModel->getClass($classId); // SELECT * FROM class WHERE id = X

// Unterrichtsfächer holen
$subjects $subjectModel->getClassSubjects($class); // SELECT * FROM subject WHERE class_id = X

// Lehrer:
$teachers $teacherModel->getClassTeachers($class); // SELECT * FROM class_has_teacher INNER JOIN teacher ON .. WHERE class_id = X
?>
Ich benutz dabei meistens die Syntax: aktion: (get), betreffs wen: (Class), was: (Subjects). So kann man (hoffentlich sehen und auch im Lesefluß erkennen) was man zurückbekommt und was man primär der Methode zur Verfügung stellen soll.

Wenn du jetzt für die Unterrichtsfächer den jeweiligen Lehrer willst, brauchst du zwei SELECTs:
PHP-Code:
<?php
class SubjectModel {
  public function 
getClassSubjects(ClassObject $class) {
    
// alle Fächer für die Klasse holen
    // alle Lehrer dieser Fächer holen
    // Zuordnung fach->setLehrer
  
}
}

// ..

$subjects $subjectModel->getClassSubjects($class);
foreach (
$subjects as $subject) {
  
$teacher $subject->getTeacher();
  echo 
$teacher->getName() . " unterrichtet die Klasse in " $subject->getTitle();
  echo 
"<hr />";
}
?>
Wenn du die Modelle untereinander vernetzt/zugänglich machst, kann getClassSubjects() nun auf $teacherModel zugreifen und die Lehrer abgreifen, ohne dass du von außen etwas davon mitbekommst.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 20.01.2011, 23:14  
Erfahrener Benutzer
 
Registriert seit: 17.01.2009
Beiträge: 150
Curcio kann nur auf Besserung hoffen
Standard

Hi,

danke für deine umfangreiche Erklärung.

Eine Frage zu den erweiterten Methoden. Woran entscheidest du ob du sagst:

Code:
$classModel->get_class_teachers($class)
oder
$teacherModel->get_teachers_by_class($class)
Würdest du ein Model / Benutzerrolle erstellen oder alles mit einem Usermodel handhaben?
__________________
..[.}}.°.°.{{.]..

Geändert von Curcio (20.01.2011 um 23:36 Uhr).
Curcio ist offline   Mit Zitat antworten
Alt 21.01.2011, 11:14  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

http://www.php.de/php-fortgeschritte...l-von-mvc.html ([Erledigt] Konzept Model von MVC)
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 21.01.2011, 11:16  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Naja die Klasse ($class) liegt ja schon vor und ich will ihre Lehrer haben, entsprechend kommt die Methode in das Lehrer-Model. Relevant ist bei mir immer, was die Methode zurückgibt. Sprich wenn ich von einer Methode Lehrer als Rückgabewert haben möchte, dann kann das folglicherweise das Lehrer-Model am besten zur Verfügung stellen. Dadurch ergibt sich natürlich eine gewisse Bindung/Abhängigkeit unter den Models:

teacher
id | name

class
id | label

class_has_teacher (oder teacher_has_class? )
teacher_id | class_id

Wenn ich jetzt für einen Lehrer alle Klassen haben möchte, kommt das ins ClassModel.
Wenn ich für eine Klasse alle Lehrer haben möchte, kommt das bei mir ins TeacherModel.
Zwei Models greifen also auf die selbe Verbindungstabelle zu, jeweils allerdings von einer anderen Seite.

Wenn man da einer gewissen Linie folgt und nach Schema die Methoden ablegt, ist es für jedermann auch einfacher zu "erraten" in welchem Model er welche Methode zu erwarten hat. Da muss halt jeder seiner eigenen Logik folgen, mir gefällt meine - wer hätts gedacht - gerade ganz gut.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Performance Fragen jwka61 PHP Tipps 2010 7 17.11.2010 19:48
MySQL Config Performance bei schlechten Abfragen cycap Datenbanken 13 15.06.2010 09:21
MySQL Datenbank, performance steigern Eldra PHP Tipps 2010 2 23.03.2010 18:34
MySQL - 2 verschiedene Datenbanken - Performance?! jGeee Datenbanken 1 24.04.2009 18:13
JPG Vergleichen - anderer Ansatz wg. Performance cyberholic PHP-Fortgeschrittene 2 03.01.2009 14:15
Performance der Datenbank erhöhen superskunk Datenbanken 20 12.11.2008 16:59
MySQL Performance cycap Datenbanken 14 03.04.2007 21:47
ImageMagick Performance Problem M3g4Star PHP Tipps 2006 1 30.11.2006 09:35
performance probleme in der community phoetron PHP-Fortgeschrittene 15 25.07.2006 08:37
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
Performance -Frage kanti PHP Tipps 2006 8 27.04.2006 13:16
Vererbung von Klassen und Performance ggfan PHP Tipps 2006 5 05.03.2006 12:00
Performance verbessern PHP Tipps 2005 2 17.03.2005 13:29
like opeartor - performance problem Datenbanken 15 08.12.2004 03:48
[Erledigt] PHP Performance PHP-Fortgeschrittene 11 13.09.2004 07:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/software-design/76326-mvc-datenbankabfragen-und-performance.html, mvc datenbankabfrage, php performance mvc, html seite performance verbessern datenbankabfragen, mvc datenbankabfragen, mvc php performace, mysql datenbank performance steigern, mvc und datenbankabfragen, datenbankabfrage für models, datenbank abfragen mvc, datenbankabfrage mit mvc, php datenbank abfragen geschwindigkeit, sql abfragen mvc, php mvc mit datenbank abfrage example, performance datenbankabfrage php, php datenbank geschwindigkeit erhöhen, model mit datenbankabfragen, mvc performance, php code einfache db abfrage mvc, php datenbankanwendung nach mvc

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:31 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum