Wstrzykiwanie zależności w C++

Opublikowane: 30/11/2014

w kategorii Zasoby.

Wstrzykiwanie zależności jest techniką która pozwala klasom być bardziej elastycznymi ponieważ usuwa zależność z klasy w taki sposób że klasa może być używana z obiektami których nie stworzyła. Ta idea jest dobrze znana w środowisku Java, ale w C++ również może zostać użyta - do pewnego stopnia.

Wstrzykiwanie w najprostrzej formie może być wyjaśnione z następującym kodem:

class MyClass1 {
private:
  OdbcDatabaseConnection *connection;
public:
  MyClass1() {
    connection = new OdbcDatabaseConnection("user=tester;password=12345");
  }
  ~MyClass1() {
    delete connection;
  }
};

W tym przykładzie MyClass1 nie może być użyte z innymi klasami połączeń (np. dla Oracle czy DB2) ponieważ tworzy połączenie samodzielnie. Aby użyć wstrzykiwania zależności tutaj wystarczy określić połączenie jako parametr konstruktora typu klasa abstrakcyjna:

class MyClass1 {
private:
  IDatabaseConnection *connection;
public:
  MyClass1(IDatabaseConnection *aConnection) {
    this->connection = aConnection;
  }
};

W kodzie powyżej MyClass1 może być użyte z każdym połączeniem które bazuje na interfejsie IDatabaseConnection (klasa abstrakcyjna) co jest użyteczne np. w czasie testów jednostkowych kiedy prawdziwe połączenie nie może być udostępnione.

Poradniki

Rozwiązania

Kontenery IoC (Inversion of Control)

Udostępnij

obserwuj