Sto lavorando su una base di codice esistente e sto cercando di ridurre un sacco di duplicati e di ottenere un comportamento polimorfico. In questo momento ho un tipo di oggetto dominio con una classe base astratta e due sottoclassi (al momento). Nel nostro dominio abbiamo a volte bisogno di creare documenti pdf di questi oggetti e inviarli come allegati di posta, scriverli su HTTP, ecc. L'aspetto del pdf ovviamente differirà un po 'tra le sottoclassi, ma non mi sento come gli oggetti di dominio dovrebbero conoscere i file pdf o come dovrebbero renderizzare e così via.
Ho estratto un'interfaccia per creare documenti pdf da questi oggetti. Questa interfaccia è implementata da una classe per sottoclasse dell'oggetto dominio e ho anche un metodo factory che decide quale implementazione dovrebbe essere usata. Attualmente prende questa decisione controllando il tipo di runtime dell'oggetto, e se non corrisponde nulla, restituisce semplicemente un "null builder" che crea un pdf vuoto.
Penso di essere nel merito di qualcosa, nel senso che ho raggiunto alcuni SoC e ho eliminato un sacco di duplicati, ma non sono sicuro che il design sia corretto. Ho una reazione istintiva dal controllare i tipi di runtime per una cosa, ma qualcosa mi dice che il fatto che avvenga in una fabbrica e che ho un'implementazione nulla da rendere, rende più OK.
Se dovessi scrivere tutto questo da capo, oggi avrei seguito un percorso completamente diverso, ma come tutti gli altri ho un tempo limitato e voglio seguire l'approccio "2 minuti per migliorare il codice", ovvero apportare miglioramenti a piccoli passi ogni tanto e il codice migliorerà nel tempo. Non ho molta familiarità con il modello, ma penso che forse un modello di visitatore potrebbe essere utile qui?