Dans mon entreprise, nous utilisons une bibliothèque de services inter-plateformes offrant de nombreux services. Ceci inclut à la fois le code multiplateforme (par exemple une classe de threads enveloppant Win32 ou API pthread) ou chaque code spécifique à une société (par exemple des classes pour gérer le protocole de communication propriétaire entre nos serveurs et nos applications clients).Avez-vous des conseils sur la façon d'emballer une bibliothèque interne pour la livrer à un client?
Nous devons fournir une partie de ces fonctionnalités à un client, qui accepte d'utiliser les mêmes options de compilateur et de compilateur que celles utilisées par la bibliothèque. Actuellement
, ma conception est centrée de faire que chaque version de notre bibliothèque aura son interface soit binaire compatible avec les précédentes:
- Délivrant une DLL/SO bibliothèque
- Utilisation de nommage simple et claire (conventions inspirées par Java camelCaseNaming, etc.)
- utilisation du TSL
- utilisation d'un espace de noms global (et préfixer toutes les macros avec le nom non ambigu pour éviter une collision de nom)
- Pimpl-ing toutes les classes qui doit être utilisé
- tout Doxygen-ing (et en donnant la "partie publique" au client)
- Simplifier et unifier nos interfaces
- Aucune méthode virtuelle dans nos classes Pimpl
- Pas de code incorporé sauf exception (même les constantes sont des valeurs constantes exportées, définies dans la source compilée et simplement déclarées dans l'en-tête public)
- Code inline exceptionnel pour les fonctions utilitaires/indirectes sans beaucoup de code à l'intérieur (par ex. la fonction de swap serait inline, appelant la méthode swap non-insérée de l'objet qu'elle permutera)
- Code en ligne exceptionnel pour certaines "classes de valeurs" simples sans code réel, pour éviter les surcharges inutiles (par exemple, une classe de nombres complexes serait insérée)
- Offrir des services de haut niveau (appelant les classes Pimpl-ées décrites au sujet) par le code inline (ce qui signifie que le client peut réutiliser/modifier à ses propres besoins)
ma liste complète, ou ai-je manque quelque chose qui simplifierait la maintenance/évolution future?
Est-ce que l'un de mes points est une erreur?