82 votes

Comment planifiez-vous l'architecture d'une application avant d'écrire du code?

Une chose que j'ai du mal avec la planification d'une application à l'architecture avant d'écrire n'importe quel code.

Je ne veux pas dire la collecte des exigences à l'étroit sur ce que l'application doit faire, mais plutôt effectivement penser à une bonne façon de disposer de l'ensemble de la classe, de données et de structures d'écoulement, et d'itération ces pensées alors que j'ai un plan crédible d'action à l'esprit avant même l'ouverture de l'IDE. Pour le moment il est trop facile de simplement ouvrir l'IDE, créer un projet vide, de commencer à écrire des bits et des bobs et laissez-la conception de "grandir" à partir de là.

Je rassemble UML est une manière de faire cela, mais je n'ai aucune expérience avec elle, de sorte qu'il semble sorte de nébuleuse.

Comment faites - vous le plan d'une application à l'architecture avant d'écrire n'importe quel code? Si UML est le chemin à parcourir, pouvez-vous recommander un concis et pratique introduction pour un développeur de smallish applications?

Je vous remercie de votre entrée.

38voto

Rob Wells Points 21714

Je considère les éléments suivants:

  1. ce que le système est censé faire, c'est, qu'est-ce que le problème est que le système est en train d'essayer de résoudre
  2. qui est le client et quels sont leurs souhaits
  3. ce que le système doit intégrer avec
  4. il n'existe aucun héritage aspects doivent être pris en considération
  5. quelles sont les relations de l'utilisateur
  6. etc...

Puis j'ai commencer à regarder le système comme une boîte noire, et:

  1. quelles sont les interactions qui doivent passer avec cette boîte noire
  2. quels sont les comportements qui doivent se produire à l'intérieur de la boîte noire, c'est à dire ce qui doit arriver à ces interactions pour la boîte noire d'exposer le comportement souhaité à un niveau supérieur, par exemple, de recevoir et de traiter les messages entrants à partir d'un système de réservation, mise à jour d'une base de données etc.

Ensuite, cela permettra de commencer à vous donner une vue du système qui se compose de diverses interne des boîtes noires, qui peuvent être ventilés de la même manière.

UML est de très bonne qualité pour représenter de tels comportements. Vous pouvez décrire la plupart des systèmes utilisant seulement deux des nombreux composants de UML, à savoir:

  • les diagrammes de classe, et
  • les diagrammes de séquence.

Vous pouvez avoir besoin diagrammes d'activité ainsi si il n'y a aucun parallélisme de comportement qui doit être décrit.

Une bonne ressource pour l'apprentissage de l'UML est Martin Fowler excellent livre "UML Distillée" (lien Amazon - juste pour le script kiddie lien nazis (-: ). Ce livre vous donne un regard rapide sur les parties essentielles de chacun des composants d'UML.

Oh. Ce que j'ai décrit est assez bien Ivar Jacobson. Jacobson est l'un des Trois Amigos de OO. En fait, UML a été initialement développé par les deux autres personnes qui forment les Trois Amigos, Grady Booch et Jim Rumbaugh

30voto

Ali Afshar Points 22836

Je trouve vraiment qu'une première écriture sur papier ou sur un tableau blanc est vraiment cruciale. Passez ensuite à UML si vous le souhaitez, mais rien ne vaut la possibilité de le dessiner à la main au début.

18voto

David Pike Points 272

Vous devriez absolument jeter un coup d'oeil au Code Complete de Steve McConnell et en particulier à son chapitre sur les cadeaux "Design in Construction"

Vous pouvez le télécharger sur son site web:

http://cc2e.com/File.ashx?cid=336

9voto

Stewart Johnson Points 7632

Si vous développez pour .NET, Microsoft vient de publier (sous forme de livre électronique gratuit!) Le Guide d'architecture d'application 2.0b1 . Il fournit de très bonnes informations sur la planification de votre architecture avant d'écrire un code.

Si vous étiez désespéré, je pense que vous pourriez en utiliser de grandes parties pour des architectures non basées sur .NET.

7voto

tvanfosson Points 268301

Je vais commencer en disant que je n'ai surtout de développement web où beaucoup de l'architecture est déjà décidé à l'avance (WebForms, maintenant MVC) et la plupart de mes projets sont de taille raisonnable, une personne efforts qui ont moins d'un an. Je sais aussi que je vais avoir un ORM et DAL pour gérer mon business object et de données d'interaction, respectivement. Récemment, j'ai passé à l'aide de LINQ pour cela, de sorte que beaucoup de la "conception" devient de conception de base de données et la cartographie via le DBML designer.

Généralement, je travaille dans un TDD (test driven development). Je ne passe pas beaucoup de temps avant de travailler sur l'architecture ou de la conception de détails. Je ne recueillir l'ensemble de l'interaction de l'utilisateur avec l'application via des histoires. J'utilise les histoires de travailler sur la conception de l'interaction et de découvrir les principaux composants de l'application. Je fais beaucoup de tableau blanc au cours de ce processus avec le client, parfois capturer les détails avec un appareil photo numérique si elles semblent suffisamment important pour garder sous forme de diagramme. Principalement mes histoires de capturer en forme du récit dans un wiki. Finalement, les histoires s'organiser dans les rejets et les itérations.

En ce moment j'ai l'habitude ont une assez bonne idée de l'architecture. Si c'est compliqué ou il y a d'inhabituel bits -- des choses qui diffèrent de mes pratiques normales -- ou je travaille avec quelqu'un d'autre (pas standard), je vais diagramme de choses (encore une fois sur un tableau blanc). La même chose est vraie de la complexité des interactions -- je peut concevoir la mise en page et de flux sur un tableau blanc, de garder (ou de la capture via l'appareil) jusqu'à ce que j'en ai fini avec cet article. Une fois que j'ai une idée générale de l'endroit où je vais et ce qui doit être fait d'abord, je vais commencer à écrire des tests pour les premières histoires. Habituellement, cela se passe de la façon suivante: "d'Accord, je vais avoir besoin de ces classes. Je vais commencer avec celui-ci et il doit le faire." Puis j'ai commencer gaiement TDDing le long et à l'architecture/design se développe à partir des besoins de l'application.

Périodiquement, je vais me retrouver à vouloir écrire des bits de code encore ou penser "ce vraiment les odeurs" et je vais refactoriser ma conception à éliminer les doubles emplois ou de remplacer le malodorante bits avec quelque chose de plus élégant. Surtout, je suis préoccupé par l'obtention de la fonctionnalité vers le bas tout en suivant les bons principes de conception. Je trouve que l'utilisation de modèles connus et de prêter attention à de bons principes comme vous allez le long fonctionne assez bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X