qué orientado objetos ingeniero hat componentes java c++ api middleware

java - ingeniero - middleware orientado a objetos



¿Cuáles son las mejores prácticas para la API de Middleware? (5)

Estamos desarrollando un SDK de middleware, tanto en C ++ como en Java para ser utilizado como biblioteca / DLL por, por ejemplo, desarrolladores de juegos, desarrolladores de software de animación, desarrolladores de Avatar para mejorar sus productos.

Lo que me gustaría saber es esto: ¿existen las "Mejores prácticas" estándar para el desarrollo de estos tipos de API?

Estoy pensando en términos de usabilidad, legibilidad, eficiencia, etc.


Eche un vistazo a las Pautas de diseño del marco . Sé que es específico de .NET, pero probablemente también puedas obtener mucha información general de él.


El video de Josh Bloch mencionado por yrp es un clásico; en segundo lugar, esa recomendación.

Algunas pautas generales:

  1. DEFINE su API principalmente en términos de interfaces, fábricas y constructores.
  2. Especifique claramente qué paquetes y clases son parte de la API.
  3. DEBE proporcionar un jar específicamente utilizado para compilar contra la API.
  4. NO confíe mucho en la herencia o en el patrón del método de la plantilla, con el tiempo esto se vuelve frágil y roto.
  5. NO use el patrón singleton o al menos úselo con extrema precaución.
  6. DO crear javadoc a nivel de paquete y clase explicando el uso y los conceptos.

Hay muchas formas de diseñar apis, dependiendo de lo que resuelva. Creo que una respuesta completa a esta pregunta sería digna de un libro completo, como el libro de pandillas de cuatro patrones . Para Java específicamente, y también para la programación de OO en general, recomendaría Effecitve Java 2nd Edition . El primero es general y una gran cantidad de patrones de programación populares, cuando se aplican y sus beneficios. Efectivo Java está centrado en Java, pero algunas partes son lo suficientemente generales como para aplicarse a cualquier lenguaje de programación.


Utilizando bibliotecas de terceros en Windows, aprendí las siguientes dos cosas:

Intente distribuir su biblioteca como una DLL en lugar de una biblioteca estática. Esto proporciona una mejor compatibilidad entre diferentes compiladores de c y enlazadores. Otro problema con las bibliotecas estáticas en c ++ visual es que la elección de la biblioteca de tiempo de ejecución puede hacer que las bibliotecas sean incompatibles con el código utilizando una biblioteca de tiempo de ejecución diferente y puede terminar necesitando distribuir una versión de la biblioteca para cada biblioteca de tiempo de ejecución.

Evite c ++ si es posible. El cambio de nombre de c ++ difiere mucho entre compiladores diferentes y es poco probable que una biblioteca creada para c ++ visual pueda vincularse desde otro entorno de compilación en Windows. Cuando se trata de C, las cosas son mucho mejores, en particular si usas dll''s.

Si realmente desea obtener las mejores partes de c ++ (como la gestión de recursos a través de constructores y destructores), cree una capa conveniente en c ++ que distribuya como código fuente que oculta sus funciones c. Como el usuario tiene la fuente y la compila localmente, no tendrá ningún nombre que explique o abiga problemas con el entorno local.

Sin saber demasiado sobre llamar al código c / c ++ de Java, espero que sea mucho más fácil trabajar con código c que con código c ++ debido a los problemas de manipulación de nombre.

El libro "Imperfect C ++" tiene alguna discusión sobre la compatibilidad de la biblioteca que encontré muy útil.