En m'instruisant sur l'architecture logicielle et les modèles de conception, j'ai remarqué que dans la plupart des cas, certaines fonctionnalités de langage et spécificités de conception sont impliquées dans l'explication.
Par exemple, pratiquement n'importe quel article ou livre qui illustrera les idées à l'aide de classes et d'interfaces. Tout ce que l'on peut facilement trouver sur ce sujet mentionnerait les objets et les concepts de POO.
Et si la langue dans laquelle le système est écrit n'a pas du tout de tels concepts? Par exemple, si j'utilise Python ou Node, qui sont typés dynamiquement et n'ont pas de notion d'interface? Que faire si j'utilise TypeScript où une interface est une construction éphémère, qui n'existe pas au moment de l'exécution? Et si j'essaie d'embrasser la programmation fonctionnelle? Dois-je ignorer par exemple SOLID et chercher d'autres concepts adaptés à ma langue?
Si oui, quels sont-ils? Malheureusement, tous les paradigmes bien adoptés (pour autant que je sache) se réfèrent en quelque sorte aux concepts et aux types de POO. Si non, quelles règles dois-je suivre lors de l'adaptation de l'architecture générale et des principes de conception à mon langage particulier et à mon cas d'utilisation?
Comment décririez-vous en général la dépendance entre l'architecture et le langage?
la source
Réponses:
Une architecture logicielle ressemble beaucoup à l'architecture d'une maison ou d'un pont. Un pont doit supporter le poids de lui-même et des véhicules qui le traversent ou des personnes qui le traversent. Il doit résister aux intempéries. Les matériaux que vous utilisez pour le construire doivent être à la fois solides et relativement légers.
Il existe de nombreux matériaux que vous pouvez utiliser pour construire une maison. Vous pouvez utiliser de la brique ou du stuc. Vous pouvez utiliser des poutres en bois ou en métal. Chaque matériau a ses propres caractéristiques, en termes de poids, de résistance, etc. Toutes ces caractéristiques affectent l'architecture.
De la même manière, le langage de programmation que vous utilisez affecte la façon dont vous construisez votre architecture. Votre architecture va être différente dans un langage de programmation qui a des classes comme C ++ et dans un langage de programmation qui n'en a pas, comme C.
Les principes SOLID concernent principalement les langages orientés objet (c'est-à-dire les langages ayant des classes).
la source
L'architecture dépend des capacités pour atteindre ses objectifs. Les choix de langue peuvent limiter les capacités. Tout langage complet de Turing a la capacité d'exécuter n'importe quelle tâche de programmation. Après cela, il s'agit de savoir dans quelle mesure le langage est lisible par l'homme.
De nombreux schémas d'architecture logicielle vous demandent de supprimer toute connaissance des choix technologiques des règles métier du domaine principal. Le seul choix technique dont vous ne pouvez jamais retirer la connaissance du noyau est la langue dans laquelle vous choisissez de l'exprimer.
Lorsque les livres sur l'architecture s'en tiennent à vous parler de leurs objectifs, le langage n'a pas d'importance tant qu'il est capable d'atteindre l'objectif. Lorsque les livres vous expliquent comment atteindre ces objectifs, la langue commence à jouer.
la source
L'architecture en tant que terme a une signification vraiment spécifique qui est très liée à l'architecture dans le monde physique et concerne essentiellement l'art et la pratique de la construction, la façon dont les choses sont fabriquées et assemblées. Dans cette optique, lorsque l'architecture est bien réalisée, je pense que le langage est étroitement lié à l'architecture, tout comme un bâtiment bien architecturé doit être intimement informé par le matériau à partir duquel il est construit.
Dans le logiciel, les choix architecturaux doivent être faits d'une manière qui soit conforme aux propriétés du langage. Si vous construisez un système avec un langage orienté objet, je m'attendrais à ce que l'architecture du système soit également orientée objet. Si vous construisez un système avec un langage fonctionnel, je m'attendrais à ce que l'architecture de ce système soit également fonctionnelle.
Ça a du sens?
la source
Je dirais, pour commencer, que même le langage dans lequel vous pensez a une profonde influence sur ce que vous pouvez concevoir. Il y a une raison pour laquelle PASCAL a été créé par Niklaus Wirth et C par Brian Kernighan et Dennis Ritchie.
À un niveau supérieur, la capacité d'exprimer certains concepts (et le manque d'autres) dirigera votre pensée et vous fera arriver à certaines solutions qui ne seraient pas nécessairement la même personne, avec un fond différent, trouverait.
Enfin, les concepts que vous mentionnez peuvent tous être mis en œuvre dans n'importe quel langage à usage général. C'est juste qu'ils peuvent ne pas avoir de support syntaxique et que l'implémentation peut être lourde. Vous pouvez écrire du code assembleur x86 orienté objet si vous êtes suffisamment engagé (ou assez fou) comme vous le pourriez avec C. En fait, les premières implémentations de C ++ étaient des préprocesseurs qui ont compilé votre code C ++ en C (et les noms de symboles modifiés ont été créés débogage beaucoup plus amusant).
la source