Quelle est la différence entre les modèles de conception et les modèles architecturaux?

119

Lorsque nous lisons sur les modèles de conception sur Internet, nous notons qu'il existe 3 catégories:

  • Créatif
  • De construction
  • Comportementale

Mais lorsque nous créons l'architecture d'un logiciel, nous pensons à MVP, MVC ou MVVM.

Par exemple, parmi les modèles de création, j'ai trouvé le modèle de singleton , mais j'ai également utilisé le singleton dans mon MPV.

Ma question est donc la suivante: un modèle de conception est-il une structure globale d'un produit?

  • Si oui, comment singleton peut-il être un modèle de conception? Parce que je peux l'utiliser n'importe où dans mon application. Fondamentalement, il est limité à la création d'une seule instance à la fois en mémoire, mais ce concept ne définit-il pas la conception du logiciel?

  • Sinon, où sont MVP, MVC et MVVM dans les trois catégories de modèles? Et quelle est la différence entre la conception et l'architecture de logiciel?

Jeevan Bhatt
la source
Déjà discuté: stackoverflow.com/a/46419722/3649347
Dis-moi comment
2
Consultez cette liste de modèles de conception et de ressources de modèles architecturaux github.com/DovAmir/awesome-design-patterns
dov.amir

Réponses:

174

Cela nécessite une explication détaillée mais je vais essayer d'esquisser les différences au mieux de ma connaissance.

Les modèles sont des points communs distillés que vous trouvez dans les programmes. Cela nous permet de déconstruire une grande structure complexe et de construire à l'aide de pièces simples. Il fournit une solution générale à une classe de problèmes.

Un grand logiciel complexe passe par une série de déconstruction à différents niveaux. À grande échelle, les modèles architecturaux sont les outils. À un niveau plus petit, les modèles de conception sont les outils et au niveau de la mise en œuvre, les paradigmes de programmation sont les outils.

Un modèle peut se produire à des niveaux très différents. Voir Fractales . Le tri rapide, le tri par fusion sont tous des modèles algorithmiques permettant d'organiser un groupe d'éléments dans un ordre.

Pour une vue des plus simplistes:

  • Paradigmes de programmation - spécifiques au langage de programmation
  • Modèles de conception - résout les problèmes récurrents dans la construction de logiciels
  • Modèles architecturaux - organisation structurelle fondamentale pour les systèmes logiciels

Les idiomes sont des techniques de programmation spécifiques au paradigme et au langage qui remplissent des détails de bas niveau.

Les modèles de conception sont généralement associés à des points communs au niveau du code. Il fournit divers schémas pour affiner et construire des sous-systèmes plus petits. Il est généralement influencé par le langage de programmation. Certains modèles pâlissent dans l'insignifiance en raison des paradigmes linguistiques . Les modèles de conception sont des tactiques à moyenne échelle qui étoffent une partie de la structure et du comportement des entités et de leurs relations.

Alors que les modèles architecturaux sont considérés comme des points communs à un niveau plus élevé que les modèles de conception. Les modèles architecturaux sont des stratégies de haut niveau qui concernent les composants à grande échelle, les propriétés globales et les mécanismes d'un système.

Comment les modèles sont-ils obtenus? À travers:

  1. réutilisation,
  2. classification
  3. et enfin l'abstraction pour distiller le commun.

Si vous avez suivi les pensées ci-dessus. Vous verrez que Singleton est un "modèle de conception" tandis que MVC est l'un des modèles "architecturaux" pour gérer la séparation des préoccupations.

Essayez de lire:

  1. http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
  2. http://en.wikipedia.org/wiki/Design_pattern
  3. http://en.wikipedia.org/wiki/Anti-pattern
pyfunc
la source
14
Très bien fait et élaboré. Maintenant, je souhaitais seulement que tout le monde utilise les termes aussi différenciés que vous les avez mis ici. Puis-je épingler une copie de votre réponse sur le mur au-dessus du distributeur de café de notre service marketing.? Peut-être qu'ils comprendront un jour. ;-)
ofi
@ofi: Merci! L'utilisation d'une construction de langage peut à la fois nous induire en erreur et nous guider. C'est quelque chose que je trouve assez puissant.
pyfunc
+3 pour nous avoir
sauvés des
Bonne réponse, merci !! comme @ofi l'a dit, je vais l'imprimer et l'épingler dans le mur de l'équipe de conception.
rouleau le
11

Les modèles de conception sont des modèles bien connus pour résoudre des problèmes techniques d'une manière qui a fait ses preuves à plusieurs reprises. Les modèles de conception sont des structures et des pratiques de conception courantes qui permettent de créer des logiciels orientés objet réutilisables. Les exemples de modèles de conception sont le modèle d'usine, le singleton, la façade, l'état, etc.

les modèles d'architecture sont des modèles bien connus pour résoudre les problèmes d'architecture d'application logicielle. L'architecture d'application logicielle est le processus de définition d'une solution structurée qui répond à toutes les exigences techniques et opérationnelles. L'architecture de l'application est l '«organisation» globale du code. Des exemples d'architectures différentes peuvent être MVC, MVVM, MVP, n-layer (c'est-à-dire UI-BLL-DAL), etc. L'architecture doit généralement être décidée à l'avance et est souvent difficile à changer une fois l'application construite.

Pawan Kumar Tiwari
la source
1

Les éléments architecturaux tendent vers des collections de classes ou de modules, généralement représentés sous forme de boîtes. Les diagrammes sur l'architecture représentent le niveau le plus élevé en regardant vers le bas, tandis que les diagrammes de classes sont au niveau le plus atomique. Le but des modèles d'architecture est de comprendre comment les principales parties du système s'emboîtent, comment les messages et les données circulent dans le système et d'autres problèmes structurels. Les modèles d'architecture utilisent une variété de types de composants, chacun étant généralement composé de modules successivement plus petits. Chaque composant a une responsabilité au sein de l'architecture. Les modèles de conception sont des modèles de conception de bas niveau ou de niveau classe pour de plus petites particules d'applications.

Pour plus d'informations: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns

Vishnu Chandel
la source
0

Eh bien, pour l'essentiel, c'est une question de langue. D'après mon expérience, la frontière entre le design et l'architecture, en ce qui concerne les logiciels, est une large rivière dont la largeur résulte du niveau de l'eau qui à son tour est principalement influencé par les saisons de commercialisation. Généralement, le terme «conception» est utilisé avec un aspect fort du comportement du logiciel tel que reconnu par les utilisateurs finaux, alors que «architecture» désigne la structure technique d'un logiciel, c'est-à-dire les composants, bibliothèques, protocoles et tout ce dont il a besoin pour répondre aux conception. Les «modèles de conception» jouent deux rôles: premièrement, ils sont considérés comme les meilleures pratiques pour résoudre une catégorie de problèmes (plus ou moins) standard, et non des produits; 2ème ils aident les développeurs à communiquer. En restant avec votre exemple de Singleton, il nous permet de savoir de quoi il s'agit en utilisant simplement le mot, au lieu d'expliquer à chaque fois, que nous avons créé une seule instance en utilisant un espace de données désigné (variable ou autre) qui est défini de manière contrôlée et garanti le seul, parce que nous avons protégé le constructeur de la classe, etc. Donc, à mon humble avis, la réponse courte à votre question est: cela dépend de qui parle. Cela a-t-il un sens?

ofi
la source
0

Les Design Patterns diffèrent des Architectural Patterns dans leur portée, ils sont plus localisés, ils ont moins d'impact sur la base de code, ils impactent une section spécifique de la base de code, par exemple:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

Les modèles architecturaux ont un impact considérable sur la base du code, affectant le plus souvent l'ensemble de l'application soit horizontalement (c'est-à-dire comment structurer le code à l'intérieur d'une couche) ou verticalement (c'est-à-dire comment une demande est traitée des couches externes vers les couches internes et arrière). Exemples de modèles architecturaux: Model-View-Controller, Model-View-ViewModel

Isuru vindula
la source