DI Pattern in Embedded C++ – Beispiel mit abstrakten Klassen

C++ erlaubt eleganteres DI durch Vererbung und Polymorphie.

Beispiel: Interface für ein Logger-Modul

// ILogger.h
class ILogger {
public:
    virtual void log(const char* message) = 0;
    virtual ~ILogger() {}
};

Implementierung für UART

// UartLogger.cpp
#include "ILogger.h"
#include "usart_driver.h"

class UartLogger : public ILogger {
public:
    void log(const char* message) override {
        usart_send_string(message);
    }
};

Anwendung via Konstruktor-Injektion

// Application.cpp
class App {
private:
    ILogger& logger;
public:
    App(ILogger& loggerRef) : logger(loggerRef) {}

    void run() {
        logger.log("App gestartet\n");
    }
};

In main.cpp

int main() {
    UartLogger uartLogger;
    App app(uartLogger);
    app.run();
}

Vorteil: Der Logger kann zur Testzeit durch eine Mock- oder RAM-basierte Implementierung ersetzt werden.

com

Newsletter Anmeldung

Bleiben Sie informiert! Wir informieren Sie über alle neuen Beiträge (max. 1 Mail pro Woche – versprochen)