2010-03-25 7 views
8

He estado comenzando una aplicación cliente-servidor. Al principio, naturalmente, creé dos proyectos en Eclipse, dos repositorios de control de fuente, etc. Pero rápidamente veo que hay un poco de código compartido entre los dos que probablemente se beneficiaría al compartir (en el mismo proyecto o en una biblioteca compartida)) en lugar de copiar.¿Debería escribirse el código cliente-servidor en un "proyecto" o dos?

Además, he estado aprendiendo y probando el desarrollo basado en pruebas, y me parece que sería más fácil probarlo en base a componentes reales del cliente en lugar de tener que configurar una gran cantidad de código solo para simular algo, cuando el código es, probablemente, en su mayoría en el cliente. En este caso, parece tener el cliente y el servidor juntos, en un proyecto, separados por paquetes raíz (org.myapp.client. * Y org.myapp.server. , quizás org.myapp.shared. también).

Mi mayor preocupación en la fusión del cliente y servidor, sin embargo, es de seguridad; ¿Cómo me aseguro de que las partes del código del servidor no lleguen a la computadora de un usuario? Cuando Eclipse empaqueta un JAR, tengo que elegir los bits específicos del servidor y espero no perder ninguno, ¿verdad?

Así que especialmente si está escribiendo aplicaciones cliente-servidor usted mismo (y especialmente en Java, aunque esto puede convertirse en una pregunta independiente del idioma si desea compartir su experiencia con esto en otros idiomas), ¿qué tipo de separación ¿se guarda entre su cliente y el código del servidor? ¿Están en diferentes paquetes/espacios de nombres o binarios completamente diferentes utilizando bibliotecas compartidas, o algo completamente diferente? ¿Cómo se prueba el código y se envía por separado?

Respuesta

3

Ninguno. Debe ser 3. (común, cliente y servidor) Sin embargo, no necesariamente tiene que ser tres "proyectos". Usando Maven creo tres submódulos bajo un proyecto maestro. Puedes hacer algo similar usando Ant.

+0

No conocía los módulos de Maven hasta ahora. Voy a intentarlo y realmente se ve prometedor. ¡Gracias por la sugerencia! Es de esperar que Hudson juegue bien con el diseño del módulo también; ¿Tienes alguna experiencia con Hudson y proyectos de múltiples módulos? – Ricket

+0

No. Todavía no he usado Hudson con un proyecto de varios módulos. Sospecho que funcionará bien, pero eso es todo lo que he conseguido. –

+0

Además, puede configurar los submódulos Cliente y Servidor para que dependan e incluyan el módulo Común, por lo que solo debe entregar dos artefactos. –

4

Mucho de esto va a depender de su implementación específica, pero normalmente encuentro que tiene al menos tres ensamblajes (binarios) que se crean con un proyecto como este.

  1. Una DLL común que contiene funcionalidad compartida que es utilizada por el cliente y el servidor
  2. La DLL/EXE para el cliente
  3. la DLL/EXE para el servidor

Uso este enfoque tiene sus elementos compartidos, pero se asegura de que los elementos que son específicos del servidor nunca estén en una distribución que se envía a las estaciones de trabajo del cliente.

1

He encontrado que al menos un proyecto por entidad terminada (implementación del servidor, cliente binario, etc.) funciona bien con, p. Hudson. Entonces puede tener código compartido en un proyecto básico disponible para todos.

+0

Ah, me alegra que menciones a Hudson, en realidad también he dedicado tiempo a configurar un servidor Hudson y Sonar, pero olvidé pensar en términos de ellos. – Ricket

+1

Úselos desde el primer día. Le ahorrará tiempo a largo plazo, y quizás también a corto plazo. –

Cuestiones relacionadas