2012-04-25 34 views
7

Estoy haciendo mi primera API que obtiene datos y los analiza desde sitios web. Entonces, hay mucha red y análisis en ella. Leí que API tiene un paquete interno en el que no debería ser público; como en Javadocs. Entonces mi pregunta es qué debería y no debería incluirse en el paquete interno. Aquí está mi diseño de paquete, estoy dejando de lado los no importantes.Java API Design - Diseño interno

.networkstats 
.networkstats.model 
.networkstats.parser 

Dentro networkstats paquete hay una clase llamada NetworkStats. Esa es la clase principal que maneja y recupera todas las conexiones de red. A continuación, utiliza las clases dentro del paquete parser para procesar los datos. Después devuelve una clase Model que contiene los datos dentro del paquete model. Quiero incluir el paquete interno porque habrá algunas clases e interfaces que no están destinadas a ser usadas por los usuarios.

Por ejemplo, quiero hacer una clase que maneje todas las conexiones de red para que las otras clases como NetworkStats puedan acceder a ella. La razón por la que quiero hacer eso es porque no quiero copiar el código en otras clases cuando puede estar en un solo lugar. Por supuesto, no quiero que otros usuarios usen esta clase, así que lo pondré en el paquete interno. También pondría mi paquete parser en el interno también. Entonces, mi pregunta principal es ¿colocas clases e interfaces que no están destinadas a ser utilizadas en público en el paquete interno? Sé que puede seguir accediendo a él.

.networkStats.internal.DataManager // class that handles network connections 
.networkStats.internal.parser 

Respuesta

10

Puede encontrar útil esta lista de comprobación de diseño de la API de Java. La primera sección es sobre el diseño del paquete.

http://theamiableapi.com/2012/01/16/java-api-design-checklist/

Ferenc

+0

Gracias, esa página realmente me ayudó. Sé que lo entiendo mejor y ese enlace tiene mucha más información que me ayudará. –

+0

He leído la lista de verificación y me gusta ir +1 para eso –

3

en primer lugar me gustaría decir que los paquetes de sub son los mismos que cualquier otro paquete, no hay tal cosa como paquetes privados en java regular, si quieres ese tipo de función que tendrá que use OSGi

Dicho esto, si desea proteger el acceso a las clases, solo elimine el público con el nombre de clase, y deje públicas solo las clases "API", esto es, las clases a las que accederán sus usuarios (llamadas usuarios los desarrolladores que usan el marco).

Cuantos más paquetes cree, más "funcionalidad privada" tendrá que exponer.

+0

He oído hablar de OSGi pero no muy seguro de lo que es, gracias, ahora sé que debo cambiar la forma accesible a las clases como usted ha dicho. –