Comment concevoir une application Java?


Quelles sont les directives générales et les meilleures pratiques à garder à l'esprit lors de la conception d'une application Java [Simple console apps to J2EE apps]?.

Salut

J'ai récemment terminé le tutoriel de programmation Java de Sun et pratiqué core java (j'ai une expérience de programmation précédente). Maintenant, je comprends les bases de l'Héritage , de l'Abstraction,du Polymorphisme, de l'Encapsulation

Maintenant, j'écris du code Java sans trop de difficulté, mais je ne suis pas sûr de la conception de l'application. C'est ma principale problème: "CONCEVOIR" l'application. Dites si j'ai donné une tâche pour créer une application en Java, Avec quoi devrais-je commencer? Comment penser? Des directives formelles/informelles que je devrais suivre lors de l'élaboration de hiérarchies de classe? Je suis vraiment confus (classe abstraite ou interface ou sous-classe..?). Dois-je commencer par tout modéliser, avant d'écrire du code?

Il serait très utile pour les gens comme moi d'avoir UN ENSEMBLE DE DIRECTIVES GÉNÉRALES/ MEILLEURES PRATIQUES, que nous pouvons suivre tout en commençant développement d'une nouvelle application java.

Veuillez me fournir quelques lignes directrices/pensées/livres/ressources / outils que je devrais lire ou utiliser

Merci d'avance Scott

Author: Dushyanth, 2010-07-09

9 answers

Il est difficile de donner des conseils vraiment généraux car il y a tellement d'applications Java différentes sur différents domaines. Cependant, un livre absolument recommandé est Domain Driven Design par Eric Evans. Voir aussiWikipedia pour une courte introduction à ce sujet.

Conseil général:

  • n'essayez pas de tout concevoir à l'avance - faites une conception raisonnablement bonne qui vous permet de commencer à coder, puis refactorisez votre compréhension du domaine du problème et du la mise en œuvre s'approfondit
  • essayez de diviser les problèmes difficiles en plus petites parties/étapes/modules que vous pouvez aborder un par un
  • essayez de penser en termes d'objets avec des responsabilités bien définies, qui modélisent (plus ou moins) le domaine du problème et coopèrent pour résoudre un problème / gérer une tâche
  • devenir bon en design nécessite avant tout de la pratique; n'ayez pas peur de faire des erreurs . Cependant, lorsque vous le faites, analysez-les et apprenez d'eux autant que vous peut
  • apprenez modèles de conception, mais ne soyez pas trop zélé-ne les utilisez que lorsqu'ils résolvent vraiment un problème et rendent votre code plus propre
 14
Author: Péter Török, 2010-07-09 14:51:37

À mon avis, tout se résume à rencontrer ce qui suit

  1. facile à comprendre
  2. facile à entretenir et à évoluer
  3. plusieurs développeurs capables de contribuer au projet (principalement en parallèle)

Pour atteindre ce qui précède, il existe certaines lignes directrices et principes suggérés par des experts sur la base de l'expérience qui sont

  1. Suivre architecture en couches
  2. Suivez lesPrincipes SOLIDES à l'intérieur et à travers les couches. Tout les modèles de conception sont d'une manière ou l'autre de contribuer à ces principes. SRP: Principe de Responsabilité Unique, OCP: Principe Ouvert Fermé, LSP: Principe de Substitution Liskov, ISP: Principe de Ségrégation d'Interface, DIP: Principe d'Inversion de dépendance
  3. SEC et BAISER principes

Ces lignes directrices et principes sont indépendants de tout paradigme ou langage de programmation. Cependant, les langages de POO aident à les implémenter plus facilement.

 5
Author: Aravind R. Yarram, 2013-01-25 14:50:54

Il existe différents paradigmes (très souvent des acronymes de 3 lettres) :

  • DDD: Conception pilotée par domaine
  • SDD: Conception pilotée par Serviice
  • MDA: Architecture pilotée par un modèle (le code et l'architecture sont extraits du modèle UML)
  • TDD: Développement piloté par les tests (les tests de validation sont implémentés avant l'application)

Avec les mots-clés, vous trouverez beaucoup d'informations sur le web.

Dans J2EE, je dirais que le SDD est le plus utilisé (il est maintenant très "normalisé", même si je ne suis pas sûr que ce soit la meilleure solution) : service (logiciel" intelligence") > domaine (objets bean utilisés pour la persistance) > DAO (persistance).

Maintenant, DDD est de plus en plus utilisé : la conception est recentrée sur les objets de domaine, qui prennent la couche "software intelligence".

 3
Author: Benoit Courtine, 2010-07-09 15:34:26

Je vous conseille vraiment de jeter un oeil à GRASP principles, il vous donne une bonne base de conception compétences.

 3
Author: James from CppDepend Team, 2011-11-12 20:28:40

Bienvenue à débordement de pile. Si vous êtes bon avec Java, lisez Head First Design Patterns. et , Tête la Première, l'analyse Orientée Objet et des design "- er", peut-être dans l'ordre inverse :)

 2
Author: ring bearer, 2010-07-09 14:44:27

Commencez par rechercher des diagrammes de classes UML qui feront rouler la balle dans la bonne direction, puis jetez un œil à Gang of Four design patterns. C'est une excellente première étape.

Http://en.wikipedia.org/wiki/Class_diagram

Http://en.wikipedia.org/wiki/Design_Patterns

Enfin, je verserais du bon code open source comme le framework Spring

Http://www.springsource.org/

 1
Author: Ayubinator, 2010-07-09 14:39:59

Je recommanderais emergent design avec TDD.

Je pense qu'il n'y a rien de spécifique à la conception Java: si vous connaissez déjà la conception d'objets, vous êtes prêt à partir !

 1
Author: Jean-Philippe Caruana, 2010-07-09 14:46:22

Ne commencez pas à coder immédiatement sans avoir de conception. Mais cela ne signifie pas que vous devez tout concevoir avant de coder. Parce que de mes expériences précédentes, je ne pouvais pas avoir de conception qui n'a pas besoin de corrections. Surtout si vous êtes nouveau dans un langage de programmation, votre conception changera en fonction des fonctionnalités du langage que vous utilisez et des bibliothèques disponibles. Mon conseil est d'avoir une conception générale qui est basée sur les aspects les plus importants de orienté objet conception telle que l'héritage, le polymorphisme, l'encapsulation etc. À partir de cette conception générale et des besoins que vous rencontrez lors de la programmation, révisez votre conception en conséquence.

Autant que vous soyez expérimenté dans la langue, votre première conception générale s'adaptera de manière beaucoup plus efficace à votre programme.

Bien que la plupart des gens disent que l'un design orienté objet doit pouvoir être écrit dans n'importe quel langage orienté objet, il n'est pas facile d'avoir un très bon générique conception comme ça. Pour être plus réaliste, ne pas tenir compte du langage utilisé pour implémenter un design particulier n'est pas un bon moyen en ce qui me concerne.

 1
Author: Mustafa Zengin, 2010-07-09 14:50:08

Eh bien les chances sont ce que vous allez faire a déjà été fait avant - au moins quelque chose de similaire. Heureusement, il y a beaucoup de choses open-source de nos jours. Donc, si vous n'avez vraiment aucune idée, une chose que vous pouvez faire est de télécharger plusieurs applications open source qui font la même chose et de les étudier. Il devrait vous donner un bon départ.

 1
Author: JRL, 2010-07-09 14:52:52