Hallo apffan200,
Ja gut, aber das Gästebuch ist doch auch "nur" ein Modul, wie der Pager und müsste doch, sofern man es im nächsten Projekt wiederverwenden will, beides mit Copy+Paste ins nächste Projekt bringen. Gut: bei den Modulen is das kein Problem, die sind ja in jedem APF Pack mitgeliefert, aber bei selbst entwickelten Modulen, die man später noch mal braucht, ist das doch dann ein Problem.
Dein Einwand ist schon korrekt. Sofern du eigene Module erstellst, die du in mehreren Projekten verwenden möchtest, gelten die gleichen Überlegungen. Hier ist es beispielsweise wichtig, diese so abzufassen, dass eine Nutzung von mehreren Modulen möglich ist (Kapselung, saubere API) und diese in mehreren Modulen zur Verfügung stehen. Für letzteres reicht an sich natürlich c&p, allerdings ist das für mehrere Projekte kaum praktikabel. Hier empfiehlt sich die Nutzung von SVN und ein entsprechendes Setup der Projekte (z.B. auschecken von Modulen in ein "lokales" Projekt oder Nutzung von svn:externals).
Vielleicht verstehe ich den Unterschied zwischen Codeabhängigkeiten und "größeren" Abhängigkeiten noch nicht so ganz. Wäre ganz nett, wenn du mir dazu ein Beispiel nennen könnstest.
Code-Abhängigkeiten gibt es auf mehreren Ebenen und die Ebene entscheidet letztlich (mehr oder weniger) über die Art der Nutzungsmöglichkeiten. Konkret bedeutet das: möchtest du ein Modul oder eine Komponente (letztlich das gleiche) in mehreren Projekten nutzen, solltest du versuchen keine Abhängigkeiten von Modul zum Projekt, sondern nur umgekehrt zu haben (Indirektion, inversion of control). Damit ist sichergestellt, dass du in einem Controller, einer Front-Controller-Action o.ä. Modul-Code hast, der sich auf das Vorhandensein eines Projektes bezieht und in einem anderen Projekt nicht funktionieren kann. Befolgst du das, wirst du keine Probleme haben.
Wenn es um Code- vs. Modul-Abhängigkeiten geht, so geht es natürlich nicht ohne Abhängigkeiten. Wichtig ist dabei immer, sich sehr klar über die Abhängigkeiten und deren Konsequenzen im Klaren zu sein. Ist dein Modul von einer Framework-Komponente abhängig (nach "unten"), ist das eine gute Abhängigkeit, ist es von einem Projekt abhängig (nach "oben"), ist das schlecht. Insofern kannst du dir Abhängigkeiten als Baum oder Schichten-Modell vorstellen, und jeweils an Hand des Einsatzgebietes deines Codes genau entscheiden, ob du Abhängigkeiten hast und wenn ja, wohin. In letzter Konsequenz ist es jeweils sehr individuell, wo du die Grenze deines Moduls Code-technisch ziehst und welche Deklaration von Abhängigkeit sich daraus ergibt.
Ein einfaches Beispiel wäre:
- Code-Abhängigkeit: In einem Controller eines Projektes wird ein Modul genutzt und direkt im Code referenziert.
- Modul-Abhängigkeit: in einem Projekt (z.B. in Templates, Controllern oder Actions) wird ein Modul mit seiner API genutzt.
Hoffe das hilft dir weiter!
