Questo problema mi ha impedito di perseguire un progetto su cui sto lavorando perché influenza l'intera struttura dell'applicazione. Questa domanda è stata brevemente sfiorata qui , ma Sento che non è stato visto da molte persone e quindi non ha avuto una risposta molto buona.
Sto lavorando su un'applicazione che si occupa della navigazione e della manipolazione di un albero di ricerca binario. Questa applicazione è controllata tramite un menu di selezione, con alcune opzioni che conducono ai sottomenu. L'approccio più incisivo a questo problema è qualcosa del genere:
int main(int argc, char *argv[])
{
// Create the object using the data in the file at path argv[1].
BinarySearchTree tree(argv[1]);
bool exit = false;
while (!exit) {
// Print the menu out here with std::cout statements.
// This always adds several lines that don't do much.
// Store the users input in a variable here.
// Coding a way that ensures something valid is input adds
// many more lines of clutter.
// If-elseif-else or switch statement here. More complexity with more
// submenus that look exactly like this here. You get how complex
// this will get.
}
}
Chiunque voglia digitare un buon codice non vuole che la sua funzione principale sia così lunga e disordinata. Rompiarlo in altre funzioni che si trovano nel mio file principale non aiuta molto, è ancora disordinato e non molto orientato agli oggetti. Una possibile soluzione sarebbe quella di inserire ciascun menu nella propria classe in questo modo.
int main(int argc, char *argv[])
{
BinarySearchTree tree(argv[1]);
MainMenu main_menu;
main_menu.run();
}
Sicuramente il metodo main più pulito, ma non un'opzione praticabile dal momento che il mio oggetto tree non può più essere utilizzato dai metodi MainMenu, e sicuramente non voglio passarlo all'infinito nei miei metodi di classe dal momento che sarebbe stile terribile. Quindi alla fine ho trovato una via di mezzo.
int main(int argc, char *argv[])
{
BinarySearchTree tree(argv[1]);
MainMenu main_menu();
bool exit = false;
while (!exit) {
unsigned long prompt = main_menu.prompt();
// The switch statement here. Still a lot of complexity I don't like
// because this can go on for quite a while depending on how deep my
// submenus go or how much I need to do for specific commands.
}
}
Ok, tutto il mio codice di esempio è fuori strada. Non mi piace nessuno di loro, e non ho trovato soluzioni veramente migliori su internet. Sono uno studente, quindi non ho alcuna esperienza pratica in questo. Esistono alcune best practice largamente accettate nel settore che non conosco? Come ti avvicineresti a questo personalmente? Ricorda, questo è in fase di implementazione in C ++, quindi sto cercando di essere il più possibile orientato agli oggetti. Tuttavia, se c'è un modo funzionale per sapere che funziona davvero bene che ti piacerebbe condividere, sarei aperto a questo.