2009-06-29 15 views
12

Creo que la naturaleza de esta pregunta es muy adecuada para las personas con mentalidad práctica en Stack Overflow.Java Time Savers

Estoy empezando a hacer un proyecto bastante grande en Java. No voy a entrar en detalles, pero va a involucrar la administración de datos, el análisis de formatos heterogéneos y la necesidad de tener una interfaz atractiva con semántica de editor. Soy un estudiante de pregrado y creo que se convertiría en un buen proyecto para mostrar mi habilidad para el empleo, diablos, idealmente sería incluso el fundamento de una nueva empresa.

Escribo para preguntarle qué atajos podría no estar pensando que ayuden con un proyecto complicado en Java. Por supuesto, estoy planeando hacerlo en Eclipse, y probablemente use SWT para la GUI. Sin embargo, sé que Java tiene la lamentable calidad de complicar demasiado todo, y no quiero quedarme atascado.

Antes de que me diga que yo quiero hacerlo en Python, o similares, sólo quiero reiterar por qué elegiría Java:

  1. porciones más experiencia con los algoritmos en Java, y habrá bastante de esos.
  2. ¿Quieres una gran biblioteca de API para ampliar la funcionalidad. Antlr, bases de datos, bibliotecas para hacer frente a determinados formatos
  3. desea que se ejecute en cualquier lugar con un rendimiento decente

    Soy de mente abierta a todas las tecnologías (más familiares con Java, Perl, SQL, un poco funcional).

EDITAR: Por el momento, lo estoy dando a djna (aunque las bajas votos). Creo que todas sus respuestas son definitivamente útiles en cierto sentido.

Creo que djna golpeó mejor las cosas que necesito tener en cuenta como programador novato, reconociendo que no estoy tomando atajos, sino que trato de no estropear. En cuanto a las sugerencias de grandes marcos, esp. J2EE, eso es demasiado en esta situación. Estoy tratando de ofrecer la solución más simple y una en la que mi API puede ser extendida por alguien que no sea un experto en J2EE/JDBC.

Gracias por mencionar Apache Commons, aunque ya lo sabía. Todavía estoy confundido sobre SWT vs. Swing, pero cada programa de Swing que he usado ha sido feo. Como mencioné en la publicación, voy a querer centrarme más en el intercambio de archivos y DB funciones limitadas que tengo que implementar yo mismo (pero seré prudente; soy consciente de los problemas de concurrencia y ACID).

Sigue siendo un wiki de la comunidad para mejorar.

Respuesta

4

Se está completando el "proyecto" de manera eficiente y hay "atajos". Sospecho que los siguientes pueden caer en la categoría de "evitar el desperdicio de esfuerzo" en lugar de ser realmente atajos, pero si alguno de ellos te hace terminar más rápido, entonces tal vez me ayuden.

1). Descomposición y separación de preocupaciones. Ya ha identificado fragmentos de alto nivel (UI, capa de persistencia, analizador, etc.). Defina las interfaces para las clases de proveedor lo antes posible y haga que todas las clases dependientes funcionen contra esas interfaces. Presta mucha atención a la usabilidad de esas interfaces, haz que sean fáciles de entender, los nombres importan. Incluso algo tan simple como la diferencia entre setShutdownFlag (true) y requestShutdown(), el segundo tiene un significado explícito y, por lo tanto, lo prefiero.

Beneficios: Mantenimiento más fácil. Incluso durante el desarrollo inicial ocurre "mantenimiento". Deseará cambiar el código que ya ha escrito. Haz que sea fácil hacerlo bien mediante una fuerte encapsulación.

2). Esperar desarrollo iterativo, refinar y rediseñar. No espere "terminar" ningún componente en aislamiento antes de usarlo. En otras palabras, no adopte un enfoque puramente ascendente para desarrollar sus componentes. A medida que los usa, obtiene más información, a medida que los implementa descubre más sobre lo que es posible.

Para permitir el desarrollo de componentes de mayor nivel, especialmente la interfaz de usuario, burlándose y cortando componentes de bajo nivel. Algo como JMock es un atajo.

3). Pruebe temprano, pruebe a menudo. Use JUnit (o equivalente). Tienes burlas para tus componentes de bajo nivel para que puedas probarlos.

Subjetivamente, creo que escribo un código mejor cuando tengo un "sombrero de prueba".

4). Defina su estrategia de manejo de errores por adelantado. Produzca buenos diagnósticos cuando se detecten errores.

Beneficios: Mucho más fácil para sacar los insectos.

5). A continuación del manejo de errores: use declaraciones de depuración diagósicas. Espolvorearlos libremente a lo largo de su código. No use System.out.println(), en su lugar utilice las funciones de depuración de su biblioteca de registro: use java.util.logging. Los depuradores interactivos son útiles, pero no la única forma de analizar problemas.

6

Apache Commons tiene un código de ahorro de tiempo que probablemente necesite y pueda volver a usar.

http://commons.apache.org/

+1

y muchas otras librerías gratuitas, consulte http://stackoverflow.com/questions/130095/most-useful-free-java-libraries –

8

Aprender/utilizar Spring, y crear su proyecto para que se ejecute sin una configuración de Primavera (esas cosas tienden a salirse de control), conservando la posibilidad de configurar los parámetros de su entorno en una etapa posterior. También obtienes una manera uniforme de integrar otros marcos como Hibernate, Quartz, ...

Y, en mi experiencia, mantente alejado de los constructores de GUI. Puede parecer un buen negocio, pero me gusta mantener el control de mi código todo el tiempo.

+0

Supongo que Estoy un poco cansado de algo tan pesado como Spring. Estoy trabajando en un dominio que nunca ha oído hablar de SQL o bases de datos y que no tendrá J2EE. En cierto sentido, esta aplicación sería muy limitada, pero DB simple para los no iluminados. En esa luz, ¿es demasiado primavera? ¿O todavía es valioso? – Overflown

+2

Ha cambiado la forma en que programé: puede comenzar con un núcleo pequeño y agradable y conectar diferentes bloques de código (usando inyección de dependencia). Esos bloques son configurables (puede anular los valores predeterminados), lo cual es muy valioso cuando se trata con diferentes clientes. (diseño para el cambio!) Podría escribir, por ejemplo, un formateador básico y extenderlo con las clases que inserte en su programa principal. No * tienes * para usar la primavera en todas partes, esa es la belleza de eso. Además, si crea un conjunto básico de funciones que interconecta en su código (pero aún se puede configurar usando la primavera), no será tan pesado ... – Ben

+0

Puede usar Guice para la inyección de dependencia. es mucho más pequeño y más fácil de controlar. – IAdapter

6
  • Joda Time para todas las manipulaciones de fecha y hora.

  • Uno de Hibernate o iBATIS para manipular los datos en una base de datos

  • no se olvide el IDE: Eclipse, Netbeans o IDEA si tiene algo de dinero y me gusta

+0

IntelliJ es tan agradable ... – Cambium

+0

Lo amo también. Pero he leído aquí diferentes opiniones. –

5

Una sensata construir y plataforma de configuración le ayudará a lo largo del camino, Ant:

http://ant.apache.org/

o Maven (preferiblemente):

http://maven.apache.org/

Especialmente como el tamaño del proyecto, y el número de módulos en el aumento de proyecto.

1

Utilice el marco de registro (es decir, Log4J) y planifíquelo. El sistema de registro confiable ahorra mucho tiempo durante la reparación de errores.

3

No descontar Swing para la GUI. Hay muchas buenas librerías Swing de terceros disponibles (de código abierto y comercial) según sus necesidades, p.

+0

Agregaría esta biblioteca de asistentes: https://wizard.dev.java.net/ – Mnementh

0

Por persistencia de datos, si no está seguro de que debe utilizar SQL, usted debe echar un vistazo a las bibliotecas de almacenamiento de datos alternos:

  • Prevayler : un sistema de base de datos en memoria, que utiliza ideas de desarrollo como "componentes de bloqueo solo", que lo hacen fácil de usar y muy performático. Puede usarse incluso para aplicaciones simples donde solo necesita guardar un estado. Tiene una Licencia BSD.
  • BerkleyDB Java Edition: un sistema de almacenamiento con diferentes capas de abstracción, por lo que se puede usar como un almacenamiento de clave-valor básico (casi una tabla hash en disco) para un sistema ACID completamente transaccional. Eche un vistazo a información de licencia porque incluso algunos programas comerciales pueden usarla de forma gratuita.

¡Tenga en cuenta que tienen ventajas y desventajas si se comparan entre sí o con una base de datos SQL estándar! Y, por supuesto, puede haber otras opciones similares, pero estas son las que conozco y me gustan. :)

PD: No se me permitió publicar los enlaces respectivos porque soy un nuevo usuario. Solo google para ellos; los primeros golpes son los correctos.

0

Puede ahorrar tiempo entre reinicios utilizando JavaRebel (commercial). En resumen, esta herramienta le permite escribir su código en Eclipse y hacer que los cambios de código se recojan al instante.

1

Para mi gran ahorro de tiempo son:

  • uso control de versiones (Subversion/Git)
  • uso automático construye (Ant/Marca/Maven)
  • uso continuo-integración (Hudson/climatizador)
  • la apache-commons-libraries son muy útiles
1

Test Driven Desarrollo

Determine la funcionalidad que desea y escriba pruebas para demostrar la funcionalidad. Luego escriba suficiente código para pasar las pruebas. Esto tendrá algunos grandes efectos secundarios:

  1. escribiendo suficiente código para satisfacer sus requisitos no se verán tentados a overbuild, lo que debería reducir la complejidad y hacer su código más limpio.
  2. Tener pruebas le permitirá "refactorizar con confianza" y hacer cambios en el código sabiendo que no está rompiendo otra parte del sistema.
  3. Está generando calidad. No solo tendrá la seguridad de que el código "funciona, pero si realmente desea utilizar este código como una especie de" hoja de vida "para posibles empleadores, esto les mostrará que coloca un gran valor en la calidad del código. Esto solo lo diferenciará de la mayoría de los desarrolladores.

Aparte de eso, estoy de acuerdo en que otros grandes ahorradores de tiempo son Spring, que tiene una versión automatizada (Maven) y usando algún tipo de control de fuente.

0

Spring Roo no solo puede hacer que su proyecto se inicie rápidamente (usando una arquitectura de sonido) sino que también reduce su mantenimiento continuo. pensando en usar Spring, servlets y/o JPA, definitivamente deberías considerarlo. También es fácil poner capas en cosas como la seguridad.