2013-04-17 10 views
7

Welche Best Practices zum Erstellen von Bibliotheken gibt es?Best Practices für Bibliotheken und Namespaces

Ich bin jetzt seit fast 10 Jahren entwickelt, und meine Bibliothek baut wie ich arbeite.

So wie ich es derzeit Setup folgt diesem Muster:

MYLIB.SomeUtility.utilFunc(); 
new MYLIB.SomeProject.ProjectClass(); //project specific classes 

//Sometimes I have classes that extends external libraries, 
//like JQuery, or KinteticJS objects 
new MYLIB.SomeExternalLibrary.ExternalLibraryClass(); 

My Library hat Dateien in css/js/php/AS3 aber um Verwirrung zu vermeiden ich wie sie jeweils in ihre separate Bibliothek getrennt haben: MYLIB_JS etc ...

Innerhalb der JS-Bibliothek zum Beispiel habe ich WebGL, Canvas, JQuery, Regular JS Klassen (wenn wir sie so nennen).

Wie Sie sehen, es ist ein bisschen ein Durcheinander, so versuche ich, zu lernen, was andere tun, so habe ich eine Liste von schnellen Fragen:

HOW TO GRIFF:

  • Verschiedene Sprachen?
  • Verschiedene Plattformen (ist das, wie es heißt? WebGL, Canvas, JQuery usw.)?
  • Verschiedene Projekte
  • Externe Bibliotheken und Abhängigkeiten

Wie ich dachte ich an Google erforschte, und ich habe mich gefragt, wie sie ihre Google Maps-Bibliothek zum Beispiel handhaben, müssen sie eine allgemeine Google Bibliothek mit eine Reihe von Utility-Funktionen, aber es gibt auch Dateien nur für Google Maps, und sie haben ein Backend vielleicht PHP und ein JS-Frontend, also wie wird alles verwaltet?

Danke für Ihre Hilfe: D

PS. Ich benutze Git für die Versionskontrolle Arbeit

Antwort

8

Ich schreibe dies, weil Sie wissen wollten, was andere tun. Hier ist was ich tue. Ich würde nicht behaupten, dass es die "beste Praxis" ist.

1) Als Jahre vergehen, merke ich, dass ich mich über Projekte an meine Bibliotheken erinnere. Weil die Projekte die eigentlichen Herausforderungen waren, nicht die Bibliotheken.

2) Wir programmieren nicht mehr in einer Sprache. Der Trend geht zu Cloud-Servern und Anwendungen müssen mehrere Plattformen in mehreren Sprachen bewältigen.

3) Ich sah, dass jedes Mal, wenn ich eine Anwendung erstelle, die Plattformcodes eine codierende Sprache und eine Framework-unabhängige (so viel wie möglich), funktionale Ähnlichkeit wiederspiegeln, wenn es besser wird.

4) Wenn Sie zurück zum Projekt schauen, sollte es bereit sein zu re-work oder irgendeine Kompilierung sollte möglich sein, ohne die Verzeichnisstrukturen etc neu zu definieren ... Wenn Sie also einen plattformspezifischen Code verwenden, müssen Sie es entsprechend tun Platform-Coding-Anforderungen, zum Beispiel ist es fast absurd, Android-Code in einer anderen Verzeichnisstruktur als Eclipse zu speichern. So

, wie ich es tun:

Der Haupteinstiegspunkt ist immer ein project. Darunter unterteile ich in Plattformen. Darunter unterteile ich in Plattform-Tools und Frameworks.

heißt:

TheGreatWebProject 
     |------->Server 
     |   |------>Php 
     |   |    |------>aScaryPhpFrameWork 
     |   |    |------>myPhpLibraries 
     |   |       |-----------> myPhpLib1 
     |   |       |-----------> myPhpLib2 
     |   |------>DotNet 
     |       |------>aScaryDotNetFrameWork 
     |       |------>myDotNetLibraries 
     |          |-----------> DotNetOutputs 
     |          |-----------> myDotNetLib 
     |          |-----------> myDotNetSources 
     |   
     | 
     |------->Client 
     |   |------>Html 
     |   |   
     |   |------>Css 
     |   | 
     |   |------>JavaScript 
     |   |    |-----------> aScaryJsLibrary 
     |   |    |-----------> myJsLib1 
     |   |    |-----------> myJsLib2 
     |   | 
     |   |------>ActionScript3 
     |       |-----------> aScaryAs3Library 
     |       |-----------> swfOutputs 
     |       |-----------> myClient1.fla 
     |       |-----------> myClient2.fla 
     |       |-----------> myAs3AppSrc(in package 
     |          management file structure) 
     |    
     |   
     |------->Extras 
        |------>Locales 
        |------>Documents 
        |------>Images 
        |------>Audio 
        |------>Video 
        |------>Other 

jedem Unterabschnitt für die subcategorizations wird Implementierung ide und Plattform dependancy reflektieren. Also kein great cure that fits all existiert ...


Nun endlich habe ich ein Verzeichnis: Projekte, und unter ihm habe ich Verzeichnisse von Jahren, und in jedem Jahr habe ich die Projekte, die ich in diesem Jahr gemacht ...

Ich hoffe, das hilft.

2

Wenn es Struktur zu projizieren kommt mein Rat ist:

1) Konsequent mit Ihrer Struktur ist wichtiger als die genaue Struktur verwenden Sie

2) Sie nicht das Rad neu erfinden - eine Struktur gelegt durch einen bestehenden Rahmen mit Sinn macht

Wie für Ihre spezifischen Fragen:

1) Verschiedene Sprachen

Ich nehme an, Sie meinen menschliche Sprachen, da wir hier über Javascript sprechen. Ich denke, Internationalisierung sollte von der Struktur Ihres Codes getrennt werden. Es gibt viele vorhandene Bibliotheken, die damit umgehen können und es wurde ausführlich in dieser Frage gerichtet: https://stackoverflow.com/questions/9640630/javascript-i18n-internationalization-frameworks-libraries-for-client-side-use

2) Verschiedene Plattformen

Ich mag vertikal Code verpacken, statt horizontal. Mit anderen Worten, ich denke Code sollte nach Domäne und nicht nach technischer Ebene gepackt werden. Es gibt eine gute Erklärung dafür in dem Buch Domain Driven Development.

3) Verschiedene Projekte

Ich könnte mir vorstellen, dass dies in der Regel implizit durch die Tatsache behandelt werden, dass der Code in verschiedenen Quellbäumen ist. Nichtsdestoweniger löst dies wahrscheinlich einen Root-Namespace und ist eine gute Vorgehensweise, da er den kleinsten globalen Fußabdruck hat.

4) Externe Bibliotheken

ich Commonjs aussehen würde - es ist eine Konvention zum Laden von JavaScript-Bibliotheken und ist ein allgegenwärtiger Standard werden. http://www.commonjs.org/

+0

Vielen Dank für die Antwort oh großer Wander Samariter hehe. Ich werde nachlesen, wenn ich nach Hause komme: D – vvMINOvv

+0

danke mein Mann, ich akzeptierte @Ihsan Antwort, wie es vollständiger war. Danke aber für deine Hilfe: D – vvMINOvv