Questa è una domanda di progettazione in cui sto cercando di soddisfare le esigenze aziendali.
 Ho due entità:   Item    e   Job   . 
Situazione originale
   Item    rappresenta un elemento pubblicitario su un libro mastro e   Job    viene creato solo per quegli oggetti   Item    che ne hanno bisogno (cioè un   Job    per tracciare l'elemento pubblicitario che attraversa il processo di modifica dello stato mentre andava da un reparto all'altro - ordine, acquisto, produzione, pronto per la spedizione, spedizione, ecc.). Ho il campo   Job::status    per tracciare i cambiamenti di stato. 
Esempio:
1. Item "Toaster"
2. Item "Warranty on Toaster"
3. Item "Discount"
 Normalmente viene creato un   Job    per l'articolo 1 solo perché è l'unico che deve passare attraverso il ciclo di produzione. In quel ciclo diventa visibile a tutte le persone che sono coinvolte nel produrlo. Tutti gli altri elementi sono stati gestiti dalla memoria e dall'out-of-the-system, ovvero creando note e remebering per elaborarle. 
   Job::status    per l'articolo 1 passa a tali cambiamenti di stato come   ordered   ,   reviewed   ,   manufactured   ,   shipped    ed è visibile su un tracker di articoli a tutti in produzione e spedizione. 
Modifica
Ora c'è bisogno di tenere traccia di tutti gli articoli, in modo che tutti possano essere "elaborati". cioè, anche se il # 2 non ha bisogno di essere fabbricato, qualcuno ha ancora bisogno di preparare i documenti di garanzia e assicurarsi che vengano spediti.
Questo crea un problema, poiché con il codice esistente, creando lavori per gli articoli 2 e 3, li inserisce nel ciclo di produzione. E i macchinisti che mettono insieme le parti in officina vedranno quegli articoli, quando non hanno nulla a che fare con la garanzia o lo sconto. Senza creare quei lavori, qualcun altro che ha bisogno di lavorare su quegli elementi (2, 3), non li vedrà nell'elemento tracker.
Domanda
Ed ecco la mia domanda: come progettare di apportare una modifica all'infrastruttura di codice esistente dove c'è un meccanismo che si occupa di tracciare gli articoli attraverso cicli diversi. Questo può voler dire riutilizzare cicli esistenti, o crearne di nuovi e incollarli insieme, o forse qualcos'altro.
Molto probabilmente finirò per modificare l'approccio esistente e / o per crearlo sopra, per soddisfare le esigenze aziendali.
Cosa ho fatto fino ad ora
 Ho apportato una modifica in cui ogni singolo   Item    ottiene un lavoro, anche se il suo ciclo di probabilità di stato è diverso da quello menzionato prima. Questo aiuta le persone non di produzione a vedere e tracciare gli articoli nel sistema di routing di lavoro interno, anche se "Sconto" passa attraverso la fase di "produzione" e "ordinamento" e "spedizione". Inoltre, tutte le persone manifatturiere vedono l'oggetto sconto e devono spingere il lavoro fino al ciclo successivo in modo che possa essere elaborato, anche se non hanno nulla a che fare con esso (producono tostapane ma non sconti). 
Pensiero 1
 Se ogni   Item    ottiene comunque una   Job   , potrei anche unirle e estendere i loro stati per adattarsi a diversi tipi di elementi. Questo può essere contorto, e non mi piace questa soluzione. 
Pensiero 2
 In alternativa, posso spostare la proprietà di stato da   Job    a   Item   , quindi creare entità diverse che tracciano   Item    in modo diverso. vale a dire   Job    per il ciclo di lavoro tradizionale, come l'elemento 1 e   JobSomethingElse    per una diversa classe di   Item    come gli articoli 2 e 3. Ciò potrebbe non essere molto auspicabile in quanto comporta modifiche estese dell'infrastruttura esistente (tutti gli stati appartiene all'entità   Job    al momento) e il loro spostamento in   Item    è uno sforzo considerevole + debugging. 
Nel complesso non sono molto chiaro su come progettare o cosa progettare per tracciare correttamente ogni itme attraverso il suo ciclo di vita nel business. Ci sono schemi o disegni che possono aiutarmi qui?