ich bin jetzt recht neu hier bei yii. Nachdem ich mir die Dokumentation komplett durchgelesen habe, sind mir noch ein paar Fragen offen geblieben. Die größte Frage, die sich mir noch stellt, ist folgende:
Was ist der Unterschied zwischen einem Modul und eine Komponente?
Ich habe verstanden, dass ein Modul der losen Kopplungen und der Wiederverwendbarkeit dienen soll.
Bedeutet dies im Umkehrschluss, dass ein Modul auch eine Komponente ist, aber eine sehr spezielle?
Ein Modul ist im Prinzip eine kleine Unter-Applikation die innerhalb von deiner Webapplikation läuft. Ein Modul kann wie eine Applikation aus Controllern, Models, Views usw… bestehen. Du kannst sogar Module in Module verschachteln. Du könntest beispielsweise ein Modul entwickeln, welches dir erlaubt über eine Weboberfläche die Rechte deiner Benutzer zu verwalten. Dieses Modul könntest du dann in mehreren Applikationen wiederverwenden und müsstest nicht jedes mal die Logik neu entwickeln.
Eine Komponente ist eine Klasse, welche innerhalb von deiner Applikation eine bestimmte Aufgabe übernimmt. Wenn du von CComponent oder eine davon abgeleiteten Klasse erbst, hast du automatisch eine weitere Komponente. Fast alle Klassen in deiner Applikation werden Komponenten sein. Jede davon hat ihre ganz bestimmte Aufgabe. Yii bringt von Haus aus bereits eine Reihe Komponenten mit (siehe dazu auch CComponent in der Class Reference). CLogger ist beispielsweise eine Komponente, die für das loggen von Nachrichten zuständig ist. Wenn du bei deiner Applikation ein ActiveRecord Model für eine bestimmte Tabelle in deiner Datenbank erstellst, hast du ebenfalls eine Komponente. Diese Komponente hat dann die Aufgabe die Daten aus deiner Tabelle zu repräsentieren.
zebra hats schon schön zusammengefasst. Nur nochmal zum Thema Komponente: Fast jede Klasse in Yii ist von CComponent abgeleitet, und damit ist fast jedes Objekt in Yii eine Komponente. Eine Komponente in der Yii-Definition ist etwas, das mit gettern/settern arbeiten kann ($user->isGuest statt $user->getIsGuest()), an das man Behaviors hängen kann und das Events verwenden kann. Folglich können das so gut wie alle Yii-Klassen.
Nicht zu verwechseln ist sie mit dem Spezialfall der Anwendungskomponente (CApplicationComponent). Das sind Komponenten die fest im Anwendungsobjekt "verdrahtet" sind und daher überall bereitstehen, z.b. Yii::app()->user. Du kannst übrigens auch eigene Anwengungskomponenten schreiben (etwa einen PDF-Generator, Mailer, …).