2008-09-15 9 views
3

Nous développons un SDK middleware, à la fois en C++ et en Java pour être utilisé comme bibliothèque/DLL par, par exemple, les développeurs de jeux, les développeurs de logiciels d'animation, les développeurs Avatar pour améliorer leurs produits. Ce que je voudrais savoir est ceci: Y a-t-il des «meilleures pratiques» standard pour le développement de ces types d'API?Quelles sont les meilleures pratiques pour l'API Middleware?

Je pense en termes de facilité d'utilisation, la lisibilité, l'efficacité, etc.

Répondre

0

Il y a beaucoup de façons de concevoir apis, en fonction de ce que vous résolvez. Je pense qu'une réponse complète à cette question serait digne d'un livre entier, comme le gang of four patterns book. Pour Java spécifiquement, et aussi juste la programmation OO en général, je recommanderais Effecitve Java 2nd Edition. Le premier est général et beaucoup de modèles de programmation populaires, quand ils s'appliquent et leurs avantages. Java efficace est centré sur Java, mais certaines parties sont assez générales pour s'appliquer à n'importe quel langage de programmation.

0

Jetez un oeil à Framework Design Guidelines. Je sais que c'est. NET spécifique, mais vous pouvez probablement apprendre beaucoup d'informations générales à partir de celui-ci aussi.

1

La vidéo de Josh Bloch mentionné par YRP est un classique - Je seconde cette recommandation.

Quelques directives générales:

  1. DO définir votre API principalement en termes d'interfaces, les usines et les constructeurs.
  2. DO clairement spécifier exactement quels packages et classes font partie de l'API.
  3. DO fournir un pot spécifiquement utilisé pour compiler contre l'API. Ne comptez pas trop sur l'héritage ou le modèle de méthode de gabarit - avec le temps cela devient fragile et brisé. NE PAS utiliser le motif singleton ou au moins l'utiliser avec une extrême prudence.
  4. Créer un package et un niveau de classe javadoc expliquant l'utilisation et les concepts.
2

De l'utilisation de bibliothèques de tiers sur Windows j'ai appris les deux choses suivantes:

Essayez de distribuer votre bibliothèque comme une DLL plutôt qu'une bibliothèque statique. Cela permet une meilleure compatibilité entre les différents compilateurs c et les lieurs. Un autre problème avec les bibliothèques statiques dans Visual C++ est que le choix de la bibliothèque d'exécution peut rendre les bibliothèques incompatibles avec le code en utilisant une bibliothèque d'exécution différente et vous pourriez avoir besoin de distribuer une version de la bibliothèque pour chaque bibliothèque d'exécution.

Évitez C++ si possible. Le changement de nom de C++ diffère beaucoup entre différents compilateurs et il est peu probable qu'une bibliothèque construite pour C++ visuel puisse être reliée à partir d'un autre environnement de construction dans Windows. En ce qui concerne C, les choses vont beaucoup mieux, en particulier si vous utilisez des DLL. Si vous voulez vraiment obtenir les bonnes parties de C++ (comme la gestion des ressources via les constructeurs et les destructeurs), créez une couche de commodité en C++ que vous distribuez comme code source qui cache vos fonctions c.Puisque l'utilisateur a la source et la compile localement, il n'aura aucun problème de mangilation de nom ou abi avec l'environnement local. Sans trop savoir comment appeler le code c/C++ à partir de Java, je m'attends à ce qu'il soit beaucoup plus facile de travailler avec du code c que du code C++ à cause des problèmes de nom.

Le livre "Imperfect C++" a quelques discussions sur la compatibilité des bibliothèques que j'ai trouvé très utile.

Questions connexes