Come posso progettare questo?

2

Dire che ho diversi tipi di operazioni che ho bisogno di eseguire. Ho una classe astratta 'BaseOperation' che ha tutte le informazioni comuni a tutte le operazioni. Ora ho bisogno di categorizzare queste operazioni sulla base di un attributo e quindi categorizzare ulteriormente ogni operazione in ogni categoria sulla base di qualche altro attributo, come mostrato nella figura sottostante. L'obiettivo è di registrare il tipo di operazione e il sottotipo per dare priorità all'indagine in caso di eventuali errori.

Il modo in cui ho pensato di farlo è: posso avere due enumerazioni corrispondenti a tipo e sottotipo in 'BaseOperation'. Posso definire un ulteriore livello di classi astratte che derivano dalla base che imposta il tipo di operazione e che fa derivare alla classe il loro tipo. Il sottotipo per ogni operazione può essere impostato per l'operazione singolarmente.

Non sono sicuro che questa sia la cosa migliore da fare e se c'è qualche modello di progettazione che posso seguire per questo scenario (non sono riuscito a trovarne ancora). Inoltre ho bisogno che questo design sia estensibile, diciamo che voglio aggiungere un altro attributo per ogni operazione (che posso facilmente fare sopra aggiungendo un altro enum in base e impostandolo di nuovo per ogni operazione).

    
posta utkarsh 26.06.2018 - 07:47
fonte

1 risposta

1

Penso che quello che stai cercando sia il Pattern Decoratore . Scrivi una classe base astratta come AbstractOperation , quindi rendi la tua BaseOperation una sottoclasse concreta. Il tuo decoratore sarebbe un'altra classe astratta che eredita anche da AbstractOperation e memorizza la classe operativa "interna". Poiché le classi di decoratore sono anche sottoclassi di AbstractOperation , puoi utilizzarle in modo intercambiabile con BaseOperation , aggiungendo semplicemente le funzionalità aggiuntive necessarie, ad esempio la registrazione personalizzata.

L'uso del pattern Decorator rende l'aggiunta di sottotipi più semplici come semplicemente scrivendo un'altra classe concreta, e il resto del codice non sarà più saggio.

    
risposta data 26.06.2018 - 08:45
fonte

Leggi altre domande sui tag