Nel mio dominio ho un'entità Activity
che ha un elenco di ITask
s. Ogni implementazione di questa attività ha le sue proprietà oltre all'implementazione di ITask
stessa. Ora ogni operazione dell'entità Activity
(ad esempio Execute()
) deve solo scorrere su questo elenco e chiamare un metodo ITask (ad esempio ExecuteTask()
).
Dove ho problemi è quando è necessario aggiornare le proprietà di attività specifiche, come nella configurazione dell'attività (non come parte del metodo di esecuzione). Come ottengo un'istanza di tale attività? Le opzioni che vedo sono:
- Ottieni l'attività per ID e lancia l'attività di cui ho bisogno. Questo o cospargerà il mio codice con:
-
Tasks.OfType<SpecificTask>().Single(t => t.Id == taskId)
- o
Tasks.Single(t => t.Id == taskId) as SpecificTask
-
- Rendi ogni attività univoca nell'intero sistema (rendi ogni attività un'entità) e crea un nuovo repository per ogni implementazione ITask
Non mi piace nessuna delle due opzioni, la prima perché non mi piace il casting: sto usando NHibernate e sono sicuro che tornerà e morderò quando comincerò a usare Lazy Loading (attualmente NHibernate usa i proxy per implementare questo). Non mi piace la seconda opzione perché ci sono / ci saranno dozzine di diversi tipi di compiti. Il che significherebbe che dovrei creare tanti repository.
Mi manca una terza opzione qui? O nessuna delle mie obiezioni alle due opzioni non è giustificata? Come hai risolto questo problema in passato?