2008-09-15 13 views
3

Wir entwickeln ein Middleware-SDK, sowohl in C++ als auch in Java, das beispielsweise von Spieleentwicklern, Animations-Softwareentwicklern und Avatar-Entwicklern als Bibliothek/DLL verwendet wird, um ihre Produkte zu verbessern.Welche Best Practices gibt es für die Middleware-API?

Was ich gerne wissen würde, ist dies: Gibt es Standard "Best Practices" für die Entwicklung dieser Arten von API?

ich in Bezug auf Benutzerfreundlichkeit denke, Lesbarkeit, Effizienz usw.

Antwort

0

Es gibt viele Möglichkeiten, apis zu gestalten, je nachdem, was Sie zu lösen. Ich denke, eine vollständige Antwort auf diese Frage wäre ein ganzes Buch wert, wie zum Beispiel die gang of four patterns book. Für Java speziell, und auch nur OO-Programmierung im Allgemeinen, würde ich Effecitve Java 2nd Edition empfehlen. Die erste ist allgemein und viele beliebte Programmiermuster, wenn sie angewendet werden und ihre Vorteile. Effektives Java ist Java-zentriert, aber Teile davon sind allgemein genug, um auf jede Programmiersprache angewendet zu werden.

0

Werfen Sie einen Blick auf Framework Design Guidelines. Ich weiß, es ist .NET-spezifisch, aber Sie können wahrscheinlich auch viele allgemeine Informationen daraus lernen.

1

Das Video von Josh Bloch von YRP erwähnt ist ein klassische - I Sekunde, die Empfehlung.

Einige allgemeine Richtlinien:

  1. DO API in erster Linie in Bezug auf die Schnittstellen, Fabriken definieren und Bauherren.
  2. Geben Sie genau an, welche Pakete und Klassen Teil der API sind.
  3. Stellen Sie ein Glas zur Verfügung, das speziell zum Kompilieren mit der API verwendet wird.
  4. Verlassen Sie sich NICHT stark auf die Vererbung oder das Template-Methodenmuster - im Laufe der Zeit wird dies zerbrechlich und zerbrochen.
  5. NICHT das Singleton-Muster verwenden oder es zumindest mit äußerster Vorsicht verwenden.
  6. DO erstellen Paket und Klassenebene Javadoc erklären Verwendung und Konzepte.
2

verwenden, Bibliotheken von Drittanbietern unter Windows habe ich die folgenden zwei Dinge gelernt:

Ihre Bibliothek als DLL zu verteilen, anstatt eine statische Bibliothek. Dies ergibt eine bessere Kompatibilität zwischen verschiedenen c-Compilern und Linkern. Ein weiteres Problem mit statischen Bibliotheken in Visual C++ ist, dass die Auswahl der Laufzeitbibliothek Bibliotheken mit Code unter Verwendung einer anderen Laufzeitbibliothek inkompatibel machen kann und Sie möglicherweise eine Version der Bibliothek für jede Laufzeitbibliothek verteilen müssen.

Vermeiden Sie C++ wenn möglich. Die C++ - Namensänderung variiert stark zwischen verschiedenen Compilern und es ist unwahrscheinlich, dass eine Bibliothek, die für visuelles C++ gebaut wurde, von einer anderen Build-Umgebung in Windows aus verlinkt werden kann. Wenn es um C geht, sind die Dinge viel besser, insbesondere wenn Sie DLLs verwenden.

Wenn Sie wirklich die guten Teile von C++ (wie Ressourcenverwaltung durch Konstruktoren und Destruktoren) erhalten möchten, erstellen Sie eine Convenience-Schicht in C++, die Sie als Quellcode verteilen, der Ihre c-Funktionen versteckt.Da der Benutzer die Quelle hat und sie lokal kompiliert, hat er keine Probleme mit der Namensänderung oder dem Fehler in der lokalen Umgebung.

Ohne zu viel über den Aufruf von c/C++ - Code von Java zu wissen, erwarte ich, dass es viel einfacher ist, mit c-Code zu arbeiten als mit C++ - Code wegen der Probleme mit dem Namen-Mangling.

Das Buch "Imperfect C++" hat eine Diskussion über Bibliothekskompatibilität, die ich sehr hilfreich fand.