principi di design
una buona api è minimale, esplicita e difficile da usare in modo sbagliato.
- riduci dipendenze in header
- nascondi dettagli implementativi
- evita copying costoso
pattern pimpl
pimpl separa interfaccia e implementazione, stabilizza abi e riduce rebuild.
// header
class renderer {
public:
renderer();
~renderer();
void draw();
private:
struct impl;
std::unique_ptr<impl> p;
};
interfacce e dependency inversion
definisci interfacce pure e usa dependency injection per testabilità.
struct storage {
virtual ~storage() = default;
virtual void save(const std::string& data) = 0;
};
versioning e compatibilità
usa semantic versioning e documenta breaking changes. evita modifiche alle firme pubbliche senza versione major.
una api stabile riduce bug nei client e migliora la manutenzione.
esercizi
rifattorizza una classe con implementazione pesante usando pimpl.
definisci un'interfaccia per storage e implementa file + memoria.
checklist
- interfacce piccole e stabili
- nascondi implementazioni private
- documenta versioni e breaking
- aggiungi test di integrazione
panoramica
In questo capitolo su design di api e pattern moderni, interfacce pulite, pimpl e architetture componibili. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.
Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).
badge: api design
obiettivi
- capire e applicare principi in uno scenario reale
- capire e applicare pimpl in uno scenario reale
- capire e applicare interfacce in uno scenario reale
- capire e applicare versioning in uno scenario reale
scheda rapida
#include <iostream>
#include <vector>
int main() {
std::vector<int> dati{1, 2, 3};
for (auto &v : dati) {
v *= 2;
}
for (const auto &v : dati) {
std::cout << v << " ";
}
std::cout << "\n";
return 0;
}
Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.
tips
- compila con warning elevati
- preferisci RAII
- usa const ovunque possibile
- evita includere troppo
- usa pimpl per stabilità ABI
- documenta ownership
tip: Un'API pubblica vive a lungo: progetta per compatibilità.
mini progetto
Disegna un'API per un modulo di rendering.
- definisci header pubblico
- separa implementazione
- aggiungi error codes
- scrivi esempi d'uso
output atteso: uno script o query ripetibile con risultati verificabili.