Seguendo l'articolo I programmatori sono persone troppo di Ken Arnold, ho cercato di implementare il < schema di> divulgazione progressiva per un'API.
Fondamentalmente, l'idea menzionata nel testo è di suddividere l'API in categorie e presentare all'utente solo ciò di cui ha bisogno. Il resto è nascosto, riducendo la complessità per qualcuno che utilizza l'API. Nel testo, presenta la sua idea con la classe JButton e i suoi oltre 100 metodi:
[...] we could use progressive disclosure to help reduce the complexity of that JButton class: put the expert stuff in an object returned by a getExpertKnobs() method, and the graphics subsystem hooks in an object returned by a getIntegrationHooks() method, and you would be left with a button API that had just a handful of methods—the basic methods we all need.
Ho cercato di implementare un esempio minimale di ciò usando C ++. Finora, non ho ottenuto risultati accettabili. Quello che voglio è questo comportamento e semplicità:
Innanzitutto, la classe contenente solo i metodi di base e ampiamente diffusi:
struct Base
{
Base()
{
// Initialize attributes (possibly many)
}
void simpleMethod()
{
// Do something simple...
}
ExtBase ext()
{
// Access to advanced features;
// this is the tricky part for me...
}
private:
// Attributes...
};
Quindi, la classe contenente le cose avanzate / esperte:
struct ExtBase
{
ExtBase()
{
// Not sure of what goes here...
}
void advancedMethod()
{
// Do something complicated...
}
};
Idealmente, questa "API" potrebbe essere utilizzata semplicemente in questo modo dall'utente:
int main ()
{
Base aBase;
aBase.simpleMethod(); // OK
aBase.advancedMethod(); // Fails. Not available by default.
aBase.ext().simpleMethod(); // Possibly OK, not sure...
aBase.ext().advancedMethod(); // OK
return 0;
}
Ho cercato sul Web per trovare esempi di questo, ma finora non è venuto fuori nulla di veramente interessante. Ho trovato un esempio in Java da questa libreria ma non ero in grado di replicarlo in C ++.
Qualcuno ha qualche idea su come questo potrebbe essere fatto?