Sto riscontrando problemi nella progettazione di una gerarchia di ereditarietà.
Nella figura:
Classe base:
- Questo utilizza il metodo Template.
- Contiene la logica / l'algoritmo di base chiama metodi virtuali / astratti
Tipi di derivati:
- Queste classi forniscono un'implementazione concreta dei metodi virtuali / astratti previsti dalla Base.
Condizioni:
- Ho un metodo virtuale (Esegui).
- Il metodo Run predefinito utilizza un altro metodo virtuale (Proc).
- Se una classe derivata utilizza il comportamento Run predefinito, deve implementare Proc.
- Se una classe derivata sovrascrive il comportamento Esegui, non dovrebbe preoccuparsi dell'esistenza di Proc, figuriamoci sovrascrivere.
Hopresoinconsiderazionel'ideadirendereRun()astrattoelasciarecheogniclassederivatagestiscalapropria.Mapoifiniròconilcodiceduplicato.
Sto usando un esempio semplificato qui.
Nel mio progetto attuale, ho diversi metodi virtuali "Run", ognuno dei quali chiama diversi metodi "Proc".
Per questo motivo, ho un sacco di metodi "Proc" virtuali con "lanciare la nuova NotImplementedException ()"
Creare un nuovo tipo derivato è anche confuso, perché il codificatore potrebbe non sapere quali metodi virtuali devono essere implementati / possono essere ignorati / etc.
Ho preso in considerazione l'utilizzo di un modello di strategia, ma dal momento che ho diversi metodi "Esegui", ognuno di questi dovrebbe essere una strategia, che sembra eccessivo / eccessivo ingaggio.
C'èunmodopersemplificarequesto?
[Aggiornamento1]
Eccounesempiopiùvicinoaltipodimetodiconcuistolavorando
E immagina ancora un altro metodo: