Come progettare un sistema di tracciamento articoli che tiene traccia di diversi tipi di articoli durante il ciclo di vita della produzione?

1

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?

    
posta Dennis 25.04.2017 - 21:17
fonte

1 risposta

2

La soluzione canonica per questi diversi processi per articoli diversi è quella di avere una classe separata per ogni tipo di processo.
Il tuo Job esistente diventerebbe una classe astratta o un'interfaccia e otterrai una gerarchia di lavori come questa

interface Job { ... }
class ManufacturingJob : implements Job { ... }
class PrintingJob : implements Job { ... }
class MiscellaneousJob : implements Job { ... }

La classe ManufacturingJob rappresenta il flusso di lavoro per gli articoli che devono essere fabbricati (paragonabile al Job esistente). La classe PrintingJob rappresenta il flusso di lavoro per gli articoli che richiedono solo la stampa di alcuni documenti, come i documenti di garanzia oi manuali. La classe MiscellaneousJob è per quegli articoli che non richiedono un'elaborazione esplicita o in cui il flusso di elaborazione è così speciale da non poter essere catturato nel tuo sistema.

Nel reparto di produzione, solo i ManufacturingJob s sarebbero visibili e i relativi articoli associati, mentre PrintingJob s e gli articoli associati sarebbero visibili solo ai dipartimenti che trattano i materiali stampati.

    
risposta data 26.04.2017 - 10:08
fonte