Dans quelle mesure l'architecture logicielle dépend-elle de la langue?

14

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?

Tristan Tzara
la source
J'ai écrit un article sur l'architecture logicielle: Gérer la complexité logicielle linkedin.com/pulse/…
overexchange
Tout d'abord, oui, l'architecture logicielle est basée sur la technologie que vous avez en tête. Par exemple: python ne tire pas parti du multithreading tant que ces threads ne sont pas liés aux entrées-sorties. Il s'agit d'une réelle limitation dans l'utilisation d'opérations liées à un processeur multi-cœurs. Deuxièmement, vous devriez écouter ceci ... youtu.be/FF-tKLISfPE Troisièmement, vous devriez analyser / travailler sur les produits d'entreprise distribués stables existants d'un domaine spécifique qui est déployé de manière évolutive, pendant au moins 5-6 ans. Il s'agit d'une compréhension organique de l'influence de la technologie sur le design. Btw..Ces produits ont été écrits dans le monde pré-java, à partir de zéro.
suréchange
Technologie Wrt ... Dans le monde Java, jusqu'à ce que la conception du langage java 5/6/7 soit en contrôle des fondateurs réels. Depuis java 8, je considérerais java comme une machine de propagande mais pas comme un langage de programmation. À mon avis, java est devenu la technologie d'un chef de projet. Donc, en tant que débutant, j'analyserais / travaillerais sur un produit écrit en C / C ++ / Python
overexchange
Veuillez ne pas utiliser le mot architecture dans votre question, c'est déroutant. Votre question concerne le design. Le choix de la langue serait généralement qualifié d'architecture, votre question n'a aucun sens dans la façon dont elle est formulée.
Martin Maat
Aussi python et javascript n'ont des interfaces, ils ne pas utiliser un mot - clé séparée pour les abornement
Caleth

Réponses:

11

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).

Robert Harvey
la source
4

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.

candied_orange
la source
Jolis points dans votre réponse, mais je suis sûr que l'architecture logicielle a été historiquement mise en œuvre avec les TECHNOLOGIES en vogue.
suréchange
@overexchange le point d'une bonne architecture est de produire un logiciel qui peut survivre à la tendance actuelle en étant prêt pour la prochaine.
candied_orange
Au moins dans le monde du middleware, les architectures de produits n'étaient pas capables de penser au-delà de RPC / RMI / CORBA avant les années 1990. J'ai vu des conceptions classiques s'appuyant sur des appels de remore orientés vers la procédure. ServiceOArch a ensuite changé la tendance du middleware, en termes d'architecture.
suréchange
2
@CandiedOrange c'est la théorie. Dans la pratique, j'ai vu beaucoup de gens faire ce qu'on appelle parfois le «développement axé sur le battage médiatique» - faites simplement ce dont leur cercle de pairs actuel parle le plus au moment de la conception afin que vous puissiez participer à cette conversation.
marstato
@marstato D'accord. Le meilleur exemple est, en utilisant Spring / Springboot dans la tendance actuelle, pour tout nouveau projet, sans savoir pourquoi.
suréchange
1

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?

RibaldEddie
la source
Merci pour votre réponse! par hasard connaissez-vous des ressources développant l'architecture logicielle en ce qui concerne les langages typés dynamiquement ou fonctionnels? tbh tout ce que j'ai vu fonctionne par exemple pour Java directement hors de la boîte mais nécessiterait une certaine adaptation pour par exemple js. quelles sont les lignes directrices possibles pour adapter les modèles d'architecture communs à un langage faiblement typé? Devrait-on même essayer cela ou devrait-il être complètement différent?
Tristan Tzara
mon souci était que si l'on utilise par exemple Java, alors il y a beaucoup de meilleures pratiques et de modèles d'architecture, mais je n'en ai pas vu pour des langages de nature différente. alors je me demandais comment les traiter
Tristan Tzara
fondamentalement, par exemple, SOLID existe-t-il toujours dans ce cas? comment l'adapter si oui? que doit-on faire si non?
Tristan Tzara
Les principes SOLID sont d'origine très orientée objet. Cependant, je pense qu'ils codent des principes d'ordre supérieur qui pourraient être applicables à n'importe quel système logiciel, quelle que soit la langue. Mais les principes rudimentaires sont exactement cela: vous devez les connaître et les comprendre avant de construire bien au-delà d'une mangeoire pour oiseaux.
RibaldEddie
@TristanTzara La programmation orientée objet a été inventée avant et sans aucun langage orienté objet. Vous pouvez le faire dans n'importe quelle langue d'usage général. Même ceux qui n'ont pas de cours.
candied_orange
1

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).

rbanffy
la source