web-dev-qa-db-fra.com

Qu'est-ce qu'une "couche d'abstraction"?

J'ai besoin d'une explication très simple parce que je ne suis pas un programmeur professionnel.

J'ai trouvé la terminologie "La couche d'abstraction" lisant la documentation de l'extension MySQLI où est décrite la différence entre les extensions MySQL, MySQLI et PDO en PHP. L'article est this , c'est là que j'ai rencontré "la couche d'abstraction" pour la première fois (renvoyé à PDO).

Maintenant, essayant d'élaborer ma question, nous pourrions parler de la couche d'abstraction PDO contre l'extension MySQLI en PHP. Ainsi, par exemple, pourquoi MySQLI n'est pas défini comme couche d'abstraction? Comment une couche d'abstraction agit? (comme PDO en PHP)

Je voudrais comprendre de manière générale quelle est une "couche d'abstraction", je ne ferai pas de questions particulières sur les extensions PHP ou MySQLI et PDO.

Alors, qu'est-ce qu'une couche d'abstraction? Et quelle est sa différence d'une extension d'une application commune?

6
marco

Souvent, une couche d'abstraction est couramment utilisée pour les détails "abstrait".

Dites que vous avez eu un programme pour déplacer de l'argent entre différentes banques. Il existe une fonction pour déplacer de l'argent à Banka et une fonction différente pour déplacer de l'argent à Bankb et ainsi de suite. Les différentes fonctions peuvent exister car les informations que différentes demandes de banques varient (comme un exemple simple peut-être que l'on demande que le prénom et le nom de famille des expéditeurs, et une autre demande la première initiale et le nom de famille des expéditeurs).

Vos fonctions pourraient être:

MoveMoneyToBankA(amount, accountNo, senderFirstName, senderSurname)
{
   ... Code to move money to bank A
}

MoveMoneyToBankB(amount, accountNo, senderFirstInitial, senderSurname)
{
   ... Code to move money to bank A
}

Pour résumer toutes les choses différentes, un programme doit penser à la communication avec différentes banques, une couche d'abstration pourrait être mise en œuvre en ajoutant la fonction 'MovemoneyTobank'

MoveMoneyToBank(amount, accountNo, senderFirstName, senderSurname, bankName)
{
   ... If bank name = 'BankA' call MoveMoneyToBankA

   ... If bank name = 'BankB', find senderFirstInitial using senderFirstName, and call 'MoveMoneyToBankB'
}

Donc, ce que vous avez fait ici est abstraité les détails qui doivent être gérés lors de la communication avec deux banques différentes. Un programmeur peut désormais utiliser la fonction General Movemoneytobank et ne pas avoir à penser aux différentes exigences de chaque banque.

En réalité, cela pourrait ne pas être fonctionner dans le même programme, mais même des projets différents dans la même solution ou un nouveau projet logiciel qui tire dans de nombreux composants et traite de la complexité du travail avec tous les composants distincts pour atteindre un objectif commun.

10
gb2d

En règle générale, une couche d'abstraction est une API (ensemble de fonctions) qui cachent la mise en œuvre/la complexité sous-jacente. Le but est de fournir une interface claire et plus facile à utiliser sur un ensemble de fonctionnalités existant.

Imaginez que vous souhaitez créer une pile à l'aide d'une liste. Vous pouvez construire une classe appelée Stack. Vous auriez une liste privée à l'intérieur pour stocker les éléments. Vous auriez également des méthodes pour pousser et faire des éléments pop de la pile. Cette classe est une couche d'abstraction sur la liste représentant une pile. Il masque la mise en œuvre (comment les éléments sont stockés, comment ils sont poussés et apparus) et fournit une interface simple pour fonctionner avec une pile.

L'article Wikipedia sur sur les couches d'abstraction est un bon point de départ.

En ce qui concerne les couches d'abstration de la base de données. Par exemple, vous avez une base de données MySQL et vous souhaitez y accéder à partir de votre programme PHP. Une couche d'abstraction dans ce cas fournirait la funtion de la connexion d'ouverture à la base de données, d'exécuter des requêtes, d'appeler des procédures stockées, etc. afin de travailler avec la base de données du code PHP, vous n'aurez pas à penser à Comment la connexion est réellement créée ou la manière dont les requêtes MySQL sont réellement transmises à la base de données, exécutées et comment le résultat est renvoyé et analysé.

2
superM

Je pense que dans la plupart des cas, une couche d'abstraction sert de simplification ou de passerelle à une couche sous-jacente plus compliquée.

Supposons que vous ayez une couche de base de données qui vous permet d'effectuer presque toutes les opérations de base de données que vous pouvez imaginer. Cependant, une telle couche ou API serait assez compliquée à utiliser en raison de son nombre de fonctionnalités. Surtout si vous voulez juste faire quelque chose de simple.

Dans ce cas, une couche d'abstraction peut être disponible uniquement pour un sous-ensemble des fonctionnalités de manière plus facile à utiliser. Tout en utilisant toujours la couche sous-jacente, cette couche pourrait ensuite fournir des méthodes/fonctions plus intuitivement nommées, plus faciles à utiliser des paramètres et/ou des paramètres prédéfinis qui devrait vous aider à démarrer ...

Souvent, de telles couches d'abstraction introduisent également des concepts mondiaux plus généraux ou réels qui sont plus facilement compris par des personnes sans experts de domaine. (Pour donner un exemple technique: la couche de base de données pourrait vous renvoyer un résultateur à qui doit être itéré, tandis que l'abstraction pourrait vous renvoyer une liste d'objets bien définis qui sont prêts à être utilisés

Bien que de telles couches sous-jacentes fournissent une fonctionnalité plus grande, elles nécessitent généralement plus de temps pour faire quelque chose si vous n'êtes pas encore familier avec elle.

2
Jérôme