Come progettare le mie lezioni per sfruttare la fabbrica ed essere estensibile?
Domanda
La mia app SOA c ++ ha un concetto di " session " che viene utilizzato scambiare dati tra servizi. Nell'esempio viene utilizzato per verificare la legalità di alcune operazioni del servizio A prima di eseguire la sessione B che commette o ripristina le modifiche. Qualunque sia.
Ho 2 tipi di modalità di sessione: normale e what-if. Andando oltre, ho una sessione diversa, sessione per legalità, sessione per assegnazione, sessione per commit ecc. Questo è un problema principale. La sessione di legalità può essere what-if o reale ecc.
Come risolverlo ed evitare la duplicazione del codice?
Posso creare un'interfaccia ISessionFactory e implementarla con WhatIfFactory e RealFactory . Quindi potrei creare una ILegalitySession e implementare WhatIfLegalitySession e RealLegalitySession . Quindi le mie fabbriche restituirebbero gli oggetti appropriati.
Ha 2 problemi principali. E se verrà la nuova modalità? Dovrò implementare nuove fabbriche e nuove classi per tutte le sessioni! Cosa succede se arriva un nuovo tipo di sessione? Devo cambiare entrambe le fabbriche ...
Forse dimettersi da 2 gerarchie e avere ciò che se le sessioni "decorano" vera sessione? Come posso localizzare la modifica?
Soluzione
Prova a implementare WhatIf con decoratori. Oppure estraete alcune parti specifiche "what if" per il tipo di strategia.
Un'altra opzione sta usando il modello di stato. Stato "WhatIf" e stato "Real".
Altri suggerimenti
Penso che il modello di decoratore abbia senso qui. Potresti anche dare un'occhiata al modello di strategia e al suo cugino in fase di compilazione, progettazione basata su criteri . È difficile dire quale sia la migliore senza ulteriori informazioni. I decoratori sono fantastici per aggiungere un comportamento aggiuntivo, gli altri due per cambiare il comportamento esistente.