patterns - ¿Cómo diseñar una aplicación Java?
singleton in java (9)
Bienvenido a la pila de desbordamiento. Si eres bueno con Java, lee Head First Design Patterns. y el análisis y diseño orientado a objetos de Head First pueden ser en orden inverso :)
¿Cuáles son las pautas generales y las mejores prácticas a tener en cuenta al diseñar aplicaciones Java [aplicaciones de consola simple para aplicaciones J2EE]?
Hola
Recientemente completé el tutorial de programación Java de Sun y practiqué Core Java (tengo experiencia previa en programación). Ahora entiendo los conceptos básicos de herencia, abstracción, polimorfismo, encapsulación
Ahora estoy escribiendo código Java sin mucha dificultad, pero no estoy seguro del diseño de la aplicación. Este es mi principal problema: "DISEÑAR" la aplicación. Decir si he asignado una tarea para crear una aplicación en Java, ¿con qué debo empezar? ¿Cómo pensar? ¿Alguna guía formal / informal que deba seguir al desarrollar jerarquías de clase? Estoy realmente confundido (clase abstracta o interfaz o subclase ..?). ¿Debo empezar por el modelo de todo, antes de escribir código?
Sería muy útil para las personas como yo tener un CONJUNTO DE DIRECTRICES GENERALES / MEJORES PRÁCTICAS, que podemos seguir al comenzar a desarrollar una nueva aplicación java.
Por favor, dame algunas pautas / pensamientos / libros / recursos / herramientas que debería leer o usar
Gracias de antemano scott
Bueno, es probable que lo que hagas ya se haya hecho antes, al menos algo similar. Afortunadamente, hay muchas cosas de código abierto en la actualidad. Entonces, si realmente no tienes idea, una cosa que puedes hacer es descargar varias aplicaciones de código abierto que hacen lo mismo y estudiarlas. Debería darte un buen comienzo.
Comience por buscar los diagramas de clase UML que harán que la bola ruede en la dirección correcta, luego observe los patrones de diseño de Gang of Four. Ese es un excelente primer paso.
http://en.wikipedia.org/wiki/Class_diagram
http://en.wikipedia.org/wiki/Design_Patterns
Por último, me gustaría verter un buen código de fuente abierta como Spring Framework
En mi opinión, todo se reduce a cumplir con el siguiente
- fácil de entender
- Fácil de mantener y evolucionar.
- Varios desarrolladores capaces de contribuir al proyecto (la mayoría en paralelo)
Para lograr lo anterior, hay ciertas pautas y principios que son sugeridos por expertos basados en la experiencia que son
- Siga la arquitectura en capas
- Siga los principios de SOLID dentro y entre capas. Todos los patrones de diseño son de una manera u otra que ayudan a lograr estos principios solamente. SRP: Principio de Responsabilidad Única, OCP: Principio Abierto Abierto, LSP: Principio de Sustitución de Liskov, ISP: Principio de Segregación de Interfaz, DIP: Principio de Inversión de Dependencia
- Principios de DRY y KISS
Estas directrices y principios son independientes de cualquier paradigma o lenguaje de programación. Sin embargo, los lenguajes OOP ayudan a implementar estos más fácil.
Es difícil dar consejos realmente generales ya que hay tantas aplicaciones Java diferentes en diferentes dominios. Sin embargo, un libro absolutamente recomendado es Domain Driven Design por Eric Evans. Véase también Wikipedia para una breve introducción sobre él.
Consejo general:
- no intente diseñar todo por adelantado : realice un diseño razonablemente bueno que le permita comenzar a codificar, luego refactorice a medida que su comprensión del dominio del problema y la implementación se profundiza
- trate de dividir los problemas difíciles en partes / pasos / módulos más pequeños que pueda abordar uno por uno
- trate de pensar en términos de objetos con responsabilidades bien definidas, que (más o menos) modelan el dominio del problema y cooperan para resolver un problema / manejar una tarea
- volverse bueno en diseño requiere práctica, ante todo; No tengas miedo de cometer errores . Sin embargo, cuando lo hagas, analízalos y aprende de ellos tanto como puedas.
- aprenda los patrones de diseño , pero no sea demasiado entusiasta; utilícelos solo cuando realmente resuelvan un problema y hagan que su código sea más limpio
Hay varios paradigmas (muy a menudo acrónimos de 3 letras):
- DDD: Domain Driven Design
- SDD: Serviice Driven Design
- MDA: Model Driven Architecture (el código y la arquitectura se extraen del modelo UML)
- TDD: Test Driven Development (las pruebas de validación se implementan antes de la aplicación)
Con estas palabras clave, encontrará mucha información en la web.
En J2EE, diría que el SDD es el más usado (ahora está muy "normalizado", incluso si no estoy seguro de que sea la mejor solución): service (software "intelligence")> domain (objetos de bean utilizados para persistencia)> DAO (persistencia).
Ahora DDD se está utilizando cada vez más: la concepción se reorienta en los objetos de dominio, que están tomando la capa de "inteligencia de software".
No comience a codificar inmediatamente sin tener ningún diseño. Pero esto no significa que debas diseñar todo antes de codificar. Porque de mis experiencias anteriores, no podía tener ningún diseño que no necesita correcciones. Especialmente si eres nuevo en un lenguaje de programación, tu diseño cambiará de acuerdo con las características del idioma que estés utilizando y las bibliotecas disponibles. Mi consejo es tener un diseño general que se base en los aspectos más importantes del diseño orientado a objetos, como la herencia, el polimorfismo, la encapsulación, etc. A partir de este diseño general y las necesidades que encuentra durante la programación, revise su diseño en consecuencia.
A medida que adquiera experiencia en el idioma, su primer diseño general se ajustará a su programa de una manera mucho más eficiente.
Aunque la mayoría de la gente dice que un diseño orientado a objetos debería poder escribirse en cualquier lenguaje orientado a objetos, no es tan fácil tener un diseño genérico tan bueno como ese. Para ser más realistas, ignorar el lenguaje que se usa para implementar un diseño en particular no es una buena manera en lo que a mí respecta.
Realmente te aconsejo que eches un vistazo a los principios de GRASP , te da una buena base de diseño.
Recomiendo diseño emergente con TDD.
Creo que no hay nada específico para el diseño de Java: si ya conoce el Diseño de Objetos, ¡ya está listo!