Il nostro cliente desidera unificare il suo sistema di ordinazione, in modo che tutti i suoi clienti finali possano utilizzare un singolo sito Web per effettuare ordini. Il sito pianificato utilizzerà i servizi Web per effettuare l'ordine in uno dei diversi sistemi di produzione.
I sistemi di produzione hanno molti servizi ordinabili diversi, che richiedono informazioni diverse quando vengono ordinati. Alcuni hanno bisogno del nome dell'utente finale; altri avranno bisogno di una data fino a quando il servizio deve essere fornito; alcuni hanno bisogno del luogo in cui verrà consegnato qualcosa; altri hanno bisogno di un punto di raccolta.
Il nuovo sito verrà creato, in modo che tutte le informazioni necessarie siano sempre consegnate. Il sito è costruito da un altro dipartimento, mentre io sono incaricato della creazione di un servizio web, che può essere utilizzato da diversi sistemi di produzione.
I sistemi di produzione necessitano di informazioni specifiche (indirizzi e-mail per l'invio di notifiche, posizioni a cui inviare persone, date e orari in cui è disponibile qualcosa). Immaginiamo un sistema per aiutare il servizio clienti di un'azienda di lavatrici: invia una notifica all'indirizzo e-mail degli utenti indicati, che la riparazione verrà eseguita a casa sua in una determinata data, che viene automaticamente assegnata dal sistema di produzione. Un altro messaggio di posta elettronica verrà inviato al lavoratore effettivo, con la posizione indicata nell'indirizzo e la data in cui dovrà eseguire il lavoro.
Un altro sistema potrebbe richiedere solo la posizione del cliente, in quanto invierà solo un pacchetto con una parte di ricambio.
Ci sono molti tipi di servizi diversi e il lavoro continuo sui sistemi. I campi vengono aggiunti al processo ogni due mesi, per supportare qualche tipo di nuovo business case.
Quale sarebbe il modo migliore per modellare i diversi tipi di campi? Dovrebbe esserci una diversa classe di ordine per ciascuno dei diversi tipi di servizio (DeliveryOrder, PickupOrder ecc.)? O dovremmo usare un'ontologia di qualche tipo (ordine con una serie di campi, ogni ordine che richiede campi diversi nell'array, che sono identificati da un FieldTypeID)?