JavaScript

Namespaces

Zu beginn, als AMD noch nicht so populär war, hatten wir begonnen die Module/Klassen in einem Objekt Baum (oder auch Namespace) zu Deklarieren. Es wurde das von den OOP sprachen her kommende Namespace Sprachkonstrukt kopiert.

Der Namespace Pfad ist immer kleingeschrieben und der Name der Klasse in Camelcase form. Objekte von Klassen sind wiederum kleingeschrieben wenn sie im Namespace definiert werden.

fuman.User = createFjsClass({
...
});
fuman.user = new fuman.User();

Namespace zu Ordner Abildung

Ziel war, dass man auf alle Klassen auf verständliche Art und Weise (wie man es von der OOP Welt kennt) zugreifen kann. Die Namespaces spiegelen Teilweise die Ordnerstuktur wieder, womit über den Namespace Name auch der Ort der Datei bestimmt werden kann.

fuman.app.core.action.HelloWorld
//Datei: admin/app/core/action/helloworld/assets/helloworld.js

mootools
//Ordner: admin/assets/js/mootools/

mootools.ext.animation
//Datei: admin/assets/js/mootools/animation.js

fuman
//Ordner: admin/assets/js/fuman/

fuman.ext.FocusHandler
//Datei: admin/assets/js/fuman/ext/focushandler.js

fjs
//Ordner: admin/assets/js/fjs/

fjs.util
//Datei: admin/assets/js/fjs/util.js

Namespace/Klasse Definieren

Objekte oder Klassen werden nach dem AMD Style definiert. Dabei wird die funktion fjs.define verwendet.

//Definition einer Klasse ohne Abhängigkeiten
fjs.define('namespace.welcher.die.ordnerstruktur.abbildet.und.KlassenNamen', function(){
return createFjsClass({
    ....
})
};

//Definition einer Klasse mit Abhängigkeiten:
fjs.define('namespace.welcher.die.ordnerstruktur.abbildet.und.KlassenNamen'
    , ['namespace.klasse.Xyz', '...']
    , function(geladeneKlasseXyz, ....)
{
return createFjsClass({
    Extends: geladeneKlasseXyz
    ....
})
};