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 Thema bewerten
Alt 01.08.2010, 21:11  
Erfahrener Benutzer
 
Benutzerbild von bitsnack
 
Registriert seit: 01.08.2010
Beiträge: 352
PHP-Kenntnisse:
Fortgeschritten
bitsnack befindet sich auf einem aufstrebenden Ast
bitsnack eine Nachricht über ICQ schicken bitsnack eine Nachricht über MSN schicken bitsnack eine Nachricht über Skype™ schicken
Standard [Erledigt] MVC-Framework: Modulsystem

Hi,

Ich bin neu hier und hoffe hier das richtige Forum für mein Probem gefunden zu haben. Ausserdem würde es mich freuen wenn mein Thema wie bei allen anderen grösseren Foren nicht einfach in der Masse untergehen würde, und wir eine gute Lösung dafür finden.

Ich schreibe zurzeit ein PHP5-MVC-Framework für den privaten Gebrauch, weil ich mir erhoffe dadurch einige Dinge zu lernen und Frameworks danach besser verstehen und benutzen zu können.
Zurzeit stehe ich aber noch vor einem Aufbau-technischen Problem, zudem mir keine akzeptable Lösung einfällt.

Ich versuche in meinem Framework ein Modulsystem zu integrieren.
Ein Modul besteht aus einem Modul-Controller und den benötigten Dateien wie z.B Views und Models oder auch andere Klassen, welche man sonst schwer einordnen kann. Diese Module sollen Libraries ersetzen, oder deren Möglichkeiten zumindest erweitern. Ein Modul soll genau wie eine Library genutzt werden können, und soll deshalb auch den gleichen Gesetzen der Ordner-Struktur unterliegen, um den Entwickler nicht zu verwirren oder zur Unterscheidung zwischen Modulen und Libraries zwingen zu müssen.

Zwei Beispiele: Die Datenbank-Library benötigt Datenbank-Treiber, und die Scaffolding-Library eigene Views und Models. Diese Dateien möchte ich bündeln, um die Übersicht und Verwaltung zu vereinfachen und zu klären.

Ein Modul soll jeweils eine eigene Config-Datei besitzen, welche zur besseren Übersicht in einem abgesonderten Config-Ordner platz finden soll.
Auch Interfaces die von den Klassen eines Moduls benötigt wird, sollte irgendwie zum Modul gehören.

Nun habe ich zu dem ganzen mal 2 Vorschläge:

1) Ein Modul ist eine Erweiterung zu einer Library. Die Library kontrolliert die Dateien des Moduls und nutzt sie. Die Config ist in einem abgesonderten Ordner, genauso wie die Interfaces, damit diese auch von anderen Klassen genutzt werden können. => Nachteil: Es wird jeweils ein eigenes System zur Erweiterung von Libraries und Interfaces und den Modul-Dateien benötigt und die Dateien welche ein Modul benötigt liegen teilweise verstreut.

2) Jedes Modul hat einen Modul-Controller, welcher im Vergleich mit der ersten Möglichkeit die Aufgabe der Library übernimmt. Jede Library ist ein Modul und bündelt somit die für die Library benötigten Dateien, mitsamt den Interfaces. => Nachteil: Interfaces können nicht von Klassen anderer Module genutzt werden, und die Erstellung einer einfachen Library wird durch zusätzliches Anlegen eines Modul-Ordners erschwert. Dafür sind alle Dateien die ein Modul benötigt gebündelt.

Habt ihr bessere Ideen, Verbesserungsvorschläge, Tipps oder ähnliches?

Vielen Dank im Voraus!

greez

bitsnack
bitsnack ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 01.08.2010, 21:35  
Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 73
PHP-Kenntnisse:
Fortgeschritten
singu befindet sich auf einem aufstrebenden Ast
Standard

Veröffentlichst du dein MVC-Framework irgendwann?
singu ist offline   Mit Zitat antworten
Alt 01.08.2010, 21:45  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Ein Modul besteht aus einem Modul-Controller und den benötigten Dateien wie z.B Views und Models oder auch andere Klassen, welche man sonst schwer einordnen kann. Diese Module sollen Libraries ersetzen, oder deren Möglichkeiten zumindest erweitern. Ein Modul soll genau wie eine Library genutzt werden können, und soll deshalb auch den gleichen Gesetzen der Ordner-Struktur unterliegen, um den Entwickler nicht zu verwirren oder zur Unterscheidung zwischen Modulen und Libraries zwingen zu müssen.
Sorry, aber das ist mir zu abstrakt. Wenn Du von Modulen sprichst - auf welcher Ebene fungieren diese? Wo ist der Unterschied zur Library?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 01.08.2010, 21:46  
Erfahrener Benutzer
 
Benutzerbild von bitsnack
 
Registriert seit: 01.08.2010
Beiträge: 352
PHP-Kenntnisse:
Fortgeschritten
bitsnack befindet sich auf einem aufstrebenden Ast
bitsnack eine Nachricht über ICQ schicken bitsnack eine Nachricht über MSN schicken bitsnack eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von singu Beitrag anzeigen
Veröffentlichst du dein MVC-Framework irgendwann?
Ja, höchstwahrscheinlich schon. Aber ich schreibe das Framework nicht für diesen Einsatz, sondern eben für meinen eigenen Gebrauch (und den von Kollegen), und veröffentliche es nur so nebenbei…

Zitat:
Sorry, aber das ist mir zu abstrakt. Wenn Du von Modulen sprichst - auf welcher Ebene fungieren diese? Wo ist der Unterschied zur Library?
Zurück zu meinen Beispielen: Einige "Libraries" benötigen eben weitere Klassen, oder auch Views und somit einige Icons etc…
Die Datenbank-Library ist für Anfragen an eine Datenbank gedacht - und zwar an eine möglichst breite Palette von unterschiedlichen Datenbanksystemen. Dazu benötigt es Datenbanktreiber, bzw. Klassen, welche die Eigenheiten von diesem Datenbanksystem festlegt und eine einheitliche Schnittstelle dazu deklariert. Diese Datenbanktreiber müssen irgendwo gespeichert sein, sie sollen der Datenbank-Library zugeordnet sein und auch ganz einfach erweitert werden können. Jetzt will ich nicht zu jeden von einer Library benötigten Dateien irgendeinen zusätzlichen Ordner machen, sondern indem ich diese Dinge in einem Modul bündle einheitlich verwalten und nutzen kann.

Die Module sind also eigentlich nichts anderes als ein Packet einer Library und den dafür benötigten Dateien.

Geändert von bitsnack (01.08.2010 um 21:53 Uhr).
bitsnack ist offline   Mit Zitat antworten
Alt 01.08.2010, 22:01  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Dann stimmt das aber nicht:
Zitat:
Die Library kontrolliert die Dateien des Moduls und nutzt sie
Die Library kann ja das Modul nicht kennen, wenn das Modul die äußere Struktur darstellt.

Und das ist dann auch unstimmig:
Zitat:
Jedes Modul hat einen Modul-Controller, welcher im Vergleich mit der ersten Möglichkeit die Aufgabe der Library übernimmt.
Haut auch nicht hin, wenn eine Library für sich alleinstehend eine Schnittstelle definiert. Genau genommen kann es keine Lösung dafür geben - entweder die Bibliothek bestimmt die Schnittstelle, dann kann man aber nicht davon ausgehen, dass ein Modul mehrere Bibliotheken in einer gemeinsamen Schnittstelle bündeln kann*) oder das Modul bestimmt das Interface, dann ist genau genommen gar keine Trennung in Module und Bibliotheken notwendig.

*) jedenfalls keine einheitliche. Du kannst natürlich im Modul nach Art des Fascade-Patterns eine eigene Schnittstelle definieren. Das hätte den Vorteil, dass Du auch nicht-gemeinsame Funktionalitäten verschiedener Bibliotheken ansatzweise wrappen kannst und ggf. als Workaround umsetzen. Sowas wie LIMIT n,m bei SQL/MySQL
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 01.08.2010, 22:20  
Erfahrener Benutzer
 
Benutzerbild von bitsnack
 
Registriert seit: 01.08.2010
Beiträge: 352
PHP-Kenntnisse:
Fortgeschritten
bitsnack befindet sich auf einem aufstrebenden Ast
bitsnack eine Nachricht über ICQ schicken bitsnack eine Nachricht über MSN schicken bitsnack eine Nachricht über Skype™ schicken
Standard

Hm, ich glaube du hast da was falsch verstanden, wahrscheinlich weil ich es schlecht erklärt habe:

Mal ein Vergleich:
Die Library ist ein HTML-Dokument. Sie benötigt noch ein Stylesheet, einige Bilder und noch 2 Javascript-Dateien. Ein Modul ist in dem Vergleich als nicht anderes als ein Ordner, in welchem sich diese Website befindet. Das einheitlich ansprechbare ist nur die Library des dazugehörigen Moduls (Library und "Modul" bzw. die restlichen benötigten Dateien gehören immer zusammen).

Ist wirklich schwer zu erklären, wenn man ja gerade ein System dafür sucht:
Eine Library benötigt zusätzliche Dateien welche keine eigenständige Library sein können (müssen ja nichtmal Klassen sein). Diese Dateien möchte ich mit der Library die sie benötigt bündel. Wie man das nennen will ist ja wurst: Modul, Bundle oder was auch immer. Jedenfalls suche ich nicht nach einem Code wie man das genau umsetzen und ansprechen kann, sondern nach einer Idee wie man sowas von der Ordner-/Datei-struktur am besten lösen könnte. Ich nenne Module absofort lieber Bundle, weil das vielleicht zu weniger Missverständnissen führt.

Ich habe eine Library und X andere benötigte Dateien dieser. Soll die Library in den Ordner des Bundles, oder gehört das Bundle einfach zur Library. Das Bundle selbst kann ohne die Library garnix. Die Library nutzt nur die Dateien in diesem Bundle.
Wenn jetzt die Libraries mit in den Ordner des Bundles tue, muss ich das auch bei Libraries machen, welche keine anderen Dateien benötigen. Dann müsste man einfach einen Ordner (= Bundle) anlegen, wo man nur die Library reintut. Somit würde das erstellen einer stinknormalen einfachen Library schwieriger werden. Mache ich es aber extern, ist die Library nicht mehr so eindeutig mit dem Bundle verbunden…

Ist reine Planungssache: Library ins Bundle oder nicht, Interfaces ins Bundle oder nicht, oder andere Ideen wie man mit dem Problem zusätzlich-benötigter Dateien besser umgehen kann?

PS: Eine Art HMVC für Libraries
bitsnack ist offline   Mit Zitat antworten
Alt 01.08.2010, 22:35  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Die Library ist ein HTML-Dokument. Sie benötigt noch ein Stylesheet, einige Bilder und noch 2 Javascript-Dateien. Ein Modul ist in dem Vergleich als nicht anderes als ein Ordner, in welchem sich diese Website befindet. Das einheitlich ansprechbare ist nur die Library des dazugehörigen Moduls (Library und "Modul" bzw. die restlichen benötigten Dateien gehören immer zusammen).
Also dieses Beispiel ist _wirklich schlecht_, wenn man über Frameworkentwicklung spricht.

Zitat:
Eine Library benötigt zusätzliche Dateien welche keine eigenständige Library sein können (müssen ja nichtmal Klassen sein). Diese Dateien möchte ich mit der Library die sie benötigt bündel. Wie man das nennen will ist ja wurst: Modul, Bundle oder was auch immer.
Das macht doch alles keinen Sinn. Sobald eine Komponente von mehreren Bibliotheken benötigt wird, solltest Du sie optimieren und dann als Core-Komponente des Frameworks umsetzen, von denen jede Library die garantierte Existenz annehmen kann. Konkret implementiert werden könnte das dann bspw. durch Including aller Core-Komponenten bzw. mit Autoloadern für desssen OO-Elemente.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 02.08.2010, 08:04  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Das klingt sehr nach dem Fehler, den viele machen, die ihr Framework/CMS möglichst flexibel halten wollen -> Am besten die komplette Struktur in irgendwelche Module/Plugins auslagern, die sich per Interface oder sonst wie ins Framework einbetten lassen.

_Das_ funktioniert so nicht. Man kann _nicht_ alles generisch abbilden. Module/Plugins sollten sich auf einer Ebene der Applikation bewegen, nicht in den verschiedenen Schichten. Damit meine ich, Module können nicht wie oben, einmal Datenbank und einmal Scaffolding-Form sein. Das funktioniert nicht!

Irgendwann steht man vor dem Problem, dass das eine "Modul" etwas spezialisiertes anbieten muss und dann noch was usw. Aus gutem Grund wurde das bisher von keinem anderen Framework so umgesetzt. Und dann hat man schon wieder etwas, für das man nur eine Klasse/Ein paar Funktionen benötigt, ohne das Modul-Drumherum..

Vor Jahren hatte ich diesen Ansatz mal ausprobiert: Sämtliche Bestandteile wurden in "Module" verpackt, die sich über eine generische Schnittstelle einbinden ließen. Damit war der Ansatz allerdings schon am Ende, denn die Benutzung z. B. einer DB-Verbindung lässt sich nun mal nicht auf einen Nenner mit einer Formular bringen.

Daher -> Module funktionieren meist nur auf einer Ebene (z. B. Kontaktformular oder Gästebuch - Mal ganz allgemein)..
xm22 ist offline   Mit Zitat antworten
Alt 02.08.2010, 18:02  
Erfahrener Benutzer
 
Benutzerbild von bitsnack
 
Registriert seit: 01.08.2010
Beiträge: 352
PHP-Kenntnisse:
Fortgeschritten
bitsnack befindet sich auf einem aufstrebenden Ast
bitsnack eine Nachricht über ICQ schicken bitsnack eine Nachricht über MSN schicken bitsnack eine Nachricht über Skype™ schicken
Standard

Vielen Dank für die hilfreichen Beiträge, das Thema ist damit wohl erledigt. Mein Framework werde ich noch verschieben und mich doch noch lieber mit anderen Patterns, Frameworks und vorallem Sprachen beschäftigen, weil PHP bestimmt nicht meine erste Wahl wäre...
bitsnack ist offline   Mit Zitat antworten
Alt 02.08.2010, 18:25  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Hmm, sonderbare Idee, sich dann an ein Framework zu machen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   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
Was nützt mir ein Framework (CakePHP) Deltachaos Software-Design 10 08.05.2010 19:00
[S] Zend Framework Coder ThisRockZ Beitragsarchiv 0 14.10.2009 13:14
Kohana Framework / CakePHP / Zend ramses PHP-Fortgeschrittene 6 29.09.2009 01:38
Scriptangebot Expression Forge Communication Framework [pre-alpha test] eXpression Scriptbörse 8 24.09.2009 16:27
Release 1.10 des Adventure PHP Framework (APF) veröffentlicht dr.e. Beitragsarchiv 0 04.09.2009 16:26
Release 1.10-RC2 des Adventure PHP Framework (APF) veröffentlicht dr.e. Beitragsarchiv 2 21.07.2009 11:22
Release 1.10-RC1 des Adventure PHP Framework (APF) veröffentlicht dr.e. Beitragsarchiv 5 19.07.2009 21:03
Pylons Python Web Framework Programmierer gesucht! zmb Beitragsarchiv 0 12.05.2009 10:52
Zend Studio for Eclipse und Zend Framework KeKs0r PHP-Fortgeschrittene 5 15.12.2008 15:10
Release 1.8 (RC1) des Adventure PHP Framework verfügbar! dr.e. Beitragsarchiv 4 11.12.2008 09:44
Lerne Grundlagen | Quellensammlung cycap PHP Einsteiger 0 12.11.2008 16:23
BrickOO :: PHP Framework Hroudtwolf Scriptbörse 14 06.05.2008 12:04
Zend Framework Melchior PHP-Fortgeschrittene 29 13.03.2008 21:12
Framework aus Haupt und Unterverzeichnis nutzen? Anotherone PHP-Fortgeschrittene 8 24.07.2007 15:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php modul system, http://www.php.de/software-design/70308-erledigt-mvc-framework-modulsystem.html, php modulsystem, bitsnack, modulsystem php, mvc mehrere module, php module mvc, php module system, eigenes php mvc framework, php modul system tutorial, module in mvc, php mvc module, php modulsystem tutorial, modul system php, php framework modules, php modul framework, ausgelagerte php dateien bündeln, \zend framework\ modul formulare library, php mvc beispiel, mvc wann neues modul

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:41 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