Come progettare le mie lezioni per sfruttare la fabbrica ed essere estensibile?

StackOverflow https://stackoverflow.com/questions/812409

  •  03-07-2019
  •  | 
  •  

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top