Ho una classe A che crea un oggetto di tipo B e lo persiste su un database.
La classe B può essere creata in diversi modi in modo da ricevere un'interfaccia ICreator in modo che possa creare l'oggetto. Il problema è che ora mi sono ritrovato a dover fare qualcosa dopo che l'oggetto è rimasto nel database. Questo è un caso molto specifico: ho bisogno di creare un quarto oggetto che rimandi l'oggetto di tipo B, per questo ho bisogno della chiave primaria dell'oggetto sul database. Non posso onestamente dire se questo tipo di azione successiva sarà necessario per casi futuri, quindi mi chiedevo il modo migliore per gestirlo.
All'inizio pensavo di creare un'interfaccia postaction e richiamarla dall'oggetto, qualcosa che sarebbe andato così:
class ClassA
{
public void CreateObjectAndPersistIt(ICreator creator, IPostAction postAction)
{
var classBObject = creator.CreateObject();
PersistObject(classBObject);
if (postAction != null)
{ postAction.DoSomeStuff(classBObject); }
}
}
Ma ho anche pensato di creare un evento su PersistObject chiamato "ObjectBCreated" e lasciare che quello che ha chiesto che l'oggetto sia creato e mantenuto si preoccupi di ciò che verrà dopo (se mai). In questo momento sono più propenso ad adottare la seconda soluzione perché la trovo più flessibile.
C'è una terza opzione che ha più senso o forse la prima opzione è superiore in un modo che mi manca attualmente?