what patterns pattern example java application-design

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.



En mi opinión, todo se reduce a cumplir con el siguiente

  1. fácil de entender
  2. Fácil de mantener y evolucionar.
  3. 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

  1. Siga la arquitectura en capas
  2. 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
  3. 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!