Devo progettare un semplice modello client-server per il sistema di fatturazione di alcuni ristoranti fittizi.
Dopo aver trascorso circa 10-15 ore sul diagramma UML, non sono arrivato a tanto. Il problema principale che sto affrontando è la progettazione OO lato client.
Le due idee attuali sono:
Design A
In questo progetto, essenzialmente sto facendo il pieno di tutte le cose relative alla gestione di menu, tabelle e qualsiasi altro oggetto relativo al ristorante in una singola classe (Client). Detto questo, pone un problema di scalabilità e viola anche il principio di responsabilità singola del design OO.
Tuttavia, semplifica enormemente la comunicazione tra la classe Client e le cose che deve gestire (ad es. i menu) poiché fanno parte della classe Client.
DesignB
Inquestaprogettazione,leattivitàsonomoltopiùdistribuiteperillatoclient.Adesempio,laclasseClientavràachefareconoggettiristorante(cioèmenuetabelle)attraversooggettiistanziatianzichédirettamente.
Inoltre,perleclassiMenu/TableperaccedereallaclasseDatabase,devonopassareattraversolaclasseClient,ilchesignificachedevonoessercialcunecomunicazionitrailClienteeleclassiMenu/Tabella.AquestoscopoesistelaclassediRichiestaastratta.InpraticamemorizzalecoseinunacodachelaclasseClientpuòsuccessivamenteritirare.
Maoraildesignsisentegiàparticolarmentecontortonelpercorsocherichiederàunarichiesta;unarichiestaverràinnalzatanellaclasseClientcheverràpoipassatainunoggettoMenu/Tabellaistanziato,dopodichéverràprelevatadallaclasseClientdaunloop(Client->Menu/Table->Client).
Quindi alla fine della giornata, quale design dovrei scegliere e come posso migliorarlo?