2010-08-20 3 views
1

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:

  1. Délivrant une DLL/SO bibliothèque
  2. Utilisation de nommage simple et claire (conventions inspirées par Java camelCaseNaming, etc.)
  3. utilisation du TSL
  4. utilisation d'un espace de noms global (et préfixer toutes les macros avec le nom non ambigu pour éviter une collision de nom)
  5. Pimpl-ing toutes les classes qui doit être utilisé
  6. tout Doxygen-ing (et en donnant la "partie publique" au client)
  7. Simplifier et unifier nos interfaces
  8. Aucune méthode virtuelle dans nos classes Pimpl
  9. 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)
  10. 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)
  11. 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)
  12. 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?

Répondre

0

Facade Pattern

Je l'ai utilisé pour créer des "interfaces programmatiques" aux grands sous-systèmes. Créez un ou plusieurs en fonction des besoins.

Questions connexes