2017-09-14 5 views
2

J'ai trouvé à partir de beaucoup de ressources que JDBC est un exemple typique de modèle de conception de pont. Mais ils ne donnaient généralement pas les détails, alors j'aimerais en connaître les détails. Selon ma compréhension:Pourquoi JDBC est un exemple typique de modèle de conception de pont?

  • Interface Driver est le pont entre les DriverManager et les classes du pilote JDBC béton
  • l'interface Connection est le pont entre les Driver et les classes de connexion JDBC béton
  • Statement interface est le pont entre le Connection et les classes d'instructions SQL concrètes
  • l'interface ResultSet est le pont entre les Statement et le résultat de classes de jeux
  • en béton au

S'il vous plaît modifier si les mes déclarations sont fausses. Je suppose également l'interface DataSource est aussi un pont, mais je ne peux pas comprendre qui est un pont entre les classes

Répondre

0

Le Bridge pattern, tel que défini par le « Gang of Four », des moyens découplage une abstraction de sa mise en œuvre de sorte que les deux peuvent varier indépendamment. Dans ce contexte, il ne s'agit pas tant de regrouper différentes classes. Au lieu de cela, le modèle illustre le Open/Closed principle où l'interface (API JDBC) reste la même, mais de nouvelles implémentations (pilotes JDBC) peuvent être ajoutées et substituées les unes aux autres.

Ce que cela signifie est que le code d'accès aux données en utilisant JDBC doit uniquement dépendre des interfaces API telles que Connection, Statement ou ResultSet, au lieu de se soucier du système de base de données réelle de l'application est connectée. JDBC va pont l'application à la base de données utilisée dans l'environnement dans lequel l'application est déployée. Pour cette raison, vous pouvez exécuter le même code (à l'aide d'abstractions JDBC) sur différents SGBDR, et seul le pilote JDBC (implémentation) doit être modifié.

+0

donc basé sur votre déclaration, aucune de mes déclarations sont bonnes? :) – Rui

+0

Je pense que vous utilisez le mot «pont» de deux manières différentes. Par exemple.Le fait de dire que l'interface "Driver" est un _bridge_ aux classes de pilotes JDBC concrètes "est l'OMI dans l'esprit de la définition du GoF. –

0

Ce n'est pas le cas. Le modèle Bridge nécessite une implémentation concrète d'une API qui correspond à une implémentation concrète d'une autre API. Il est rarement utilisé: en fait, je l'ai utilisé exactement une fois dans les 20 ans et plus depuis que le livre du GoF est apparu, et j'ai regretté cette occasion. JDBC fournit des définitions abstraites d'une API (interfaces) qui sont implémentées par des implémentations concrètes de l'API , et qui à leur tour entreprennent des opérations réseau, plutôt que d'appeler une API différente. Toutefois, un pilote JDBC de type 2 serait un exemple interne du modèle Bridge. Dans cette architecture, la couche Java parle à une couche JNI qui parle à une autre API C probablement déjà existante et fournie par le fournisseur. Cette architecture était transitoire et je doute que vous trouverez un exemple maintenant.

+0

"implémentation concrète d'une API qui correspond à une implémentation concrète d'une autre API": Je ne pense pas que c'est ainsi que le GoF a défini Bridge. Votre définition semble plus proche du modèle d'adaptateur. Le projet du GoF's Bridge consiste à découpler le contrat de la mise en œuvre. –

+0

@MickMnemonic Non, il s'agit de pouvoir faire varier l'abstraction et l'implémentation indépendamment. Vous l'avez dit vous-même. Vous ne pouvez pas faire cela s'ils ont la même interface. – EJP

+0

Désolé, mais je ne comprends pas ce que vous voulez dire par là. Une abstraction est l'interface de l'implémentation. –