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 04.10.2010, 19:23  
Benutzer
 
Registriert seit: 04.10.2010
Beiträge: 62
PHP-Kenntnisse:
Fortgeschritten
Geryon befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Framework Kernel Konzept

Erst mal vielen Dank für diese Diskussionsplattform.

Da ich in letzter Zeit viele kleine Projekte umsetzte, habe ich eine Framework Kernel gebastelt. Diese soll mich in Zukunft unterstützen und mir die Arbeit erleichtern. Ich möchte nun wissen, in wie fern ihr mein Konzept als gut einstuft oder auch nicht. Und spart bitte nicht mit Kritik.
Meine Grundidee ist folgende: Ich habe eine statische Kernklasse. Genannt core::
Diese Kernklasse kann im Prinzip nichts als sich selber zu erweitern indem sie in der Lage ist andere definierte Klassen hinzuzuladen beziehungsweise Instanzen von diesen zu erzeugen und deren Methoden zu nutzen.
Dies geschieht mit core::sub('name_der_klasse')->methode_der_klasse();

Zum Hintergrund: statische Klassen sind im gesamten System verfügbar. In diesem Fall core::
Core:: kann somit in einer Funktion oder auch in anderen Klassen verwendet werden ohne dass core:: jedensmall umständlich wie im falle eines objektes (zum Beispiel $core->) globalisiert werden müsste. Beispiel:

PHP-Code:
function my_function()
{
    
//hier muss ich nun nicht global $database-> verwenden sondern einfach
    
core::sub('database')->insert();

Auf diese Art und Weise ist es mir möglich auch bereits vorhandene Klassen einzubinden und diese einfach mit core::sub('another_class')-> verwenden zu können

Die Kernklasse instanziert außerdem 4 weitere wichtige Klassen von Anfang an:

PHP-Code:
core::sub('stream')-> 
Kümmert sich um output und output-buffering
PHP-Code:
core::sub('debug')-> 
Kümmert sich um Deburinformationen, Fehlermeldungen und Logs
PHP-Code:
core::sub('extend')-> 
Stellt 4 verschiedene Erweiterungsmethoden zur Verfügung
PHP-Code:
core::sub('event')-> 
Stellt Eventhandler bereit

Näheres zu den Extensions:

Weiterer Code, Funktionen und Klassen können über die Methoden von core::sub('extend')-> dem Skript zugänglich gemacht werden.

So kann nun in einer Extension eine Klasse definiert werden. Andere Klassen können nun über core:: auf die neue Klasse zugreifen.


Es gibt 4 Arten von Extensionmethoden in core::sub('extend')-> und speziell da bin ich mir über den Sinn und Unsinn noch nicht ganz im Klaren

PHP-Code:
core::sub('extend')->file('pfad_einer_datei'); 
lädt eine date über file_get_contents() und eval()
PHP-Code:
core::sub('extend')->extension('name der extension'); 
lädt eine extension über file_get_contents und eval() aus einem definierten Extensionordner
PHP-Code:
core::sub('extend')->incl('pfad_einer_datei'); 
lädt eine date über include hinzu
PHP-Code:
core::sub('extend')->string(' echo "hallo welt"; '); 
lädt Erweiterungsinformationen aus einem String über eval()

Warum habe ich nun die Unterscheidung zwischen file() und incl() gemacht? Meine Überlegung ist folgende: include erlaubt den internen Einsatz von global und noch ein paar anderen Dingen, die Entwicklern am Herzen liegen könnten, welche aber bei eval außen vor bleiben.
eval() und file_get_contents() arbeiten wiederherum schneller als include() und es gibt die möglichkeit Returns zu erzeugen. Der Extensionschreiber kann also wählen, wie seine Extension eingebunden wird. Oder was diese speziell benötigt.

extension() meint letztendlich nichts anderes als file(), nur dass hier ein Ordner existiert, der jede Extension in einem Unterordner aufbewahrt. Hier genügt die Angabe des Namens der Extension (Ordnername).

Nun noch einmal die eigentlichen Fragen: Was haltet ihr von der Art und Weise der Umsetzung von core::sub('extension_name')->methode() und wie gefällt das Extension Konzept. Denn gerade zu letzterem habe ich mich fast totgegoogelt.

Vielen Dank für eure Mühen. Lg
Geryon ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 04.10.2010, 21:59  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Zitat:
Zitat von Geryon Beitrag anzeigen
Diese Kernklasse kann im Prinzip nichts als sich selber zu erweitern indem sie in der Lage ist andere definierte Klassen hinzuzuladen beziehungsweise Instanzen von diesen zu erzeugen und deren Methoden zu nutzen.
Dies geschieht mit core::sub('name_der_klasse')->methode_der_klasse();
Damit hast du im Prinzip erstmal das Registry Pattern angewendet, das hat sicher seine Daseinsberechtigung, sollte aber nicht pauschal als global-Ersatz herhalten. Als Alternative seien Dependency Injection Container genannt.

Zitat:
Zitat von Geryon Beitrag anzeigen
Warum habe ich nun die Unterscheidung zwischen file() und incl() gemacht? Meine Überlegung ist folgende: include erlaubt den internen Einsatz von global und noch ein paar anderen Dingen, die Entwicklern am Herzen liegen könnten, welche aber bei eval außen vor bleiben.
eval() und file_get_contents() arbeiten wiederherum schneller als include() und es gibt die möglichkeit Returns zu erzeugen. Der Extensionschreiber kann also wählen, wie seine Extension eingebunden wird. Oder was diese speziell benötigt.
Deine Annahmen hier sind schlicht falsch. Auch include erlaubt Rückgabewerte und mit eval() ausgeführter code hat keinen eigenen scope. Probiers aus:
PHP-Code:
$g 'foo';
function 
f() {
  
$l 'bar';
  eval(
'global $g; echo $g; echo $l;');
}
f(); 
Dass eval() und file_get_contents() schneller sein soll kann ich mir auch nicht vorstellen, hast du Quellen dazu?
fab ist offline   Mit Zitat antworten
Alt 05.10.2010, 06:58  
Benutzer
 
Registriert seit: 04.10.2010
Beiträge: 62
PHP-Kenntnisse:
Fortgeschritten
Geryon befindet sich auf einem aufstrebenden Ast
Standard

Ich beziehe mich dabei auf folgenden Artikel:

http://www.webmaster-talk.com/php-fo..._contents.html

Wirklich überprüft habe ich das allerdings noch nicht. Und auch wenn es tatsächlich schneller sein sollte gibt es evtl. andere Nachteile. Evtl. sollte ich erstmal ein benchmark schreiben.
Geryon ist offline   Mit Zitat antworten
Alt 05.10.2010, 08:12  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Da geht es allerdings um plain text, der nicht geparst werden soll. Das ist natürlich nur so lange schneller bis du ihn dann mit eval doch parsen lässt
fab ist offline   Mit Zitat antworten
Alt 05.10.2010, 09:03  
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

Was Du da hast, ist wie schon angedeutet, eine Registry/Factory, die evtl. noch zu einem DI-Container ausgebaut werden könnte, aber Framework würde ich das nicht nennen - Wobei das jetzt hoffentlich nicht wieder in einen Glaubenskrieg ausartet..
xm22 ist offline   Mit Zitat antworten
Alt 05.10.2010, 12:50  
Benutzer
 
Registriert seit: 04.10.2010
Beiträge: 62
PHP-Kenntnisse:
Fortgeschritten
Geryon befindet sich auf einem aufstrebenden Ast
Standard

Nein sicher kein Glaubenskrieg. Weil es ja auch kein Framework ist sondern nur eine Grundlegende Komponente davon. Ich möchte es ja nur als Kern für zukünftige Projekte nutzen. Aber vielen dank erstmal, dass ich nun weis, wie das überhaupt heist, was ich da gemacht habe. Das hilft mir schon sehr viel weiter.

Die Extensions werde ich dann wohl auf include laufen lassen.

Und da fällt mir gerade noch etwas ein. Ich habe mich gestern mit einem Programmierer eines größeren bekannten Projektes unterhalten. Ich wollte mal so hören, wie bei denen die Kerne so arbeiten. Er sagte mir, dass er am Anfang bei Projekten immer eine kleine Microkernel eingesetzt hat, die sich so wie bei mir jetzt, erweitern kann.

Er sagte mir aber noch, dass er nun an einem neuen Kern arbeitet. Er wollte mir nur so viel sagen, dass sich der Kern nicht mehr erweitert, sondern dass Extensions von Anfang an den Kern erweitern. Wisst ihr zufällig, was damit gemeint sein könnte? Mehr wollte er leider nicht sagen. Aber da ich lange nach verschiedenen Erweiterungskonzepten gesucht habe, interessiert mich das natürlich besonders.
Geryon ist offline   Mit Zitat antworten
Alt 05.10.2010, 12:55  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Nö keine Ahnung was er damit meint. "Kerne" einer Software gibt es wie Sand am Meer, jeder kann sich da sein eigenes Süppchen kochen und nennt es am Ende den Kern seines Frameworks. Der eine nennt es Microkernel der andere Kern einer Core und einer Hauptkomponente und jedes mal steckt das selbe oder etwas vollkommen anderes dahinter.

Schau dir richtige Frameworks an wie die aufgebaut sind, vlt. bekommst du dann einen Einblick wie in etwa Software aufgebaut werden KANN!
Flor1an ist offline   Mit Zitat antworten
Alt 05.10.2010, 13:56  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Meine Grundidee ist folgende: Ich habe eine statische Kernklasse. Genannt core::
Diese Kernklasse kann im Prinzip nichts als sich selber zu erweitern indem sie in der Lage ist andere definierte Klassen hinzuzuladen beziehungsweise Instanzen von diesen zu erzeugen und deren Methoden zu nutzen.
Ich halte das für Unsinn. Es ist konzeptionell nichts weiter wie globale Variablen "in hübsch". Ein Framework sollte einem Entwickler eine eine umfangreichere Basis geben. Klassisches Beispiel ist das von xm22 genannte DI-Thema. Alternativ eine generische API für Module auf GUI- oder Business-Ebene.

In der aktuellen Form wird dir das nicht helfen. Ich schließe mich daher Flor1ans Rat an!
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 05.10.2010, 14:42  
Benutzer
 
Registriert seit: 04.10.2010
Beiträge: 62
PHP-Kenntnisse:
Fortgeschritten
Geryon befindet sich auf einem aufstrebenden Ast
Standard

Ja das mit den Dependency Injections hört sich echt gut an. Hab auch schon nen tut dazu gefunden. Zu den generischen Apis auch. Scheint, dass es nun doch ne Glaubensfrage ist, für welches Paradigma ich mich entscheide.

Gibt es noch mehr Ideen zu solchen Grundkonzepten? Mein Problem ist halt immer, wie ich die benennen soll, oder wie das eigentlich heist. Daher finde ich dazu dann auch schwer was.

Also jetzt weis ich ja schonmal, dass ich nach Dependency Injections und generischen Apis googeln kann. Gibts noch mehr dieser Zauberworte?
Geryon ist offline   Mit Zitat antworten
Alt 05.10.2010, 14:52  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Also jetzt weis ich ja schonmal, dass ich nach Dependency Injections und generischen Apis googeln kann. Gibts noch mehr dieser Zauberworte?
Wie wärs mit "Design Pattern" oder "Software Architektur"
cycap 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
Framework, für mich(ja oder warten?), wenn ja welches? ArtiHl Off-Topic Diskussionen 7 24.09.2010 18:59
Was nützt mir ein Framework (CakePHP) Deltachaos Software-Design 10 08.05.2010 19:00
Konzept einer Datenbankabstraktion Dark Guardian Software-Design 29 30.01.2010 18:13
Sinn von Frameworks? alessandro Off-Topic Diskussionen 45 31.12.2009 17:51
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

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php framework erweiterungskonzepte, framework konzepte software, google.comkernel.php, klassen konzepte php, php framework konzept, kernelkonzept, was ist eine kernklasse, kernel-konzept, kernel konzept

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