Class Design per regole aziendali speciali

1

Sto sviluppando un'applicazione che consente alle persone di inserire ordini di produzione personalizzati. Tuttavia, mentre la maggior parte richiede documenti cartacei simili, alcuni di loro hanno documenti personalizzati che solo loro richiedono. Il mio attuale design di classe ha una classe Manufacturer, di cui una delle variabili membro è una matrice di oggetti RequiredSubmission.

Tuttavia, ci sono due questioni su cui sono piuttosto preoccupato.

In primo luogo, alcuni produttori sono disposti ad accettare o un modulo standard o il proprio modulo personalizzato. Sto pensando di archiviarlo nell'oggetto RequiredSubmission, con una serie di moduli alternativi che sono un valido sostituto. Non sono sicuro che sia l'ideale, tuttavia.

Il problema principale, tuttavia, è che alcuni produttori hanno cicli di scadenza. Ad esempio, i moduli A, B e C devono essere consegnati entro il 1 ° gennaio, mentre il pagamento deve essere eseguito entro il 10 gennaio. Se ti mancano quelli, dovrai aspettare fino al prossimo ciclo. Non sono esattamente sicuro di come posso farlo funzionare con le mie classi esistenti, come posso dire "questo insieme di date appartiene allo stesso ciclo, con la data A per il modulo A, la data B per il modulo B, ecc."

Apprezzerei molto qualsiasi idea su come progettare al meglio queste classi.

    
posta Samuel Front 04.09.2013 - 10:32
fonte

1 risposta

1

Parte della sfida che stai affrontando è perché non stai separando le responsabilità in modo appropriato. Devi inoltre separare la logica o il costrutto di dati dell'ordine dall'ordine fisico che verrà inserito.

Iniziamo con gli ordini. Dovresti avere una classe MyMfgOrder che contenga tutte le informazioni necessarie per generare un ordine personalizzato. Questo sarà strettamente correlato al modulo standard che hai menzionato, ma potrebbe avere estensioni dovute ai requisiti del modulo personalizzato. Questo è il tuo costrutto logico del modulo d'ordine.

Successivamente, avrai bisogno di classi per il modulo d'ordine personalizzato di ogni venditore, come VendorAMfgOrder . Per semplificare la tua vita, prendi il tuo MyMfgOrder come parte del costruttore e poi fai compilare il modulo personalizzato in base alla classe del tuo modulo d'ordine. Questo sarebbe uno dei numerosi costrutti di ordine fisico.

Seguirò la classe Vendor a questo punto. Il Vendor ha alcune proprietà specifiche, ad esempio se richiedono un modulo personalizzato e qualsiasi data associata alla consegna. La localizzazione di queste proprietà risale alla responsabilità: il Vendor "possiede" la necessità di un modulo personalizzato e i relativi requisiti di consegna.

Quando vai a lavorare con un'istanza del logico MyMfgOrder , alla fine dovrai selezionare un Vendor prima di effettuare l'ordine. Una volta selezionato Vendor , dovrai compilare le informazioni sulla scadenza di consegna per quel fornitore e il tipo di modulo d'ordine accettato.

Nel mio esempio qui sotto, non ho davvero specificato come tenere traccia dei particolari moduli da usare perché non hai specificato una lingua particolare. E ci sono diversi modi per tenere traccia di ciò che deve essere la forma finale attraverso enumerazioni, generici, array o cosa no. Il punto è che MyMfgOrder rappresenta una vista logica dell'ordine che dovrà essere trasformato in una vista fisica dell'ordine inoltrato al fornitore effettivo. È opportuno che la vista logica comprenda quale dovrebbe essere la forma fisica.

Rompere le cose in questo modo ti permette di tenere traccia delle preoccupazioni immediate con alcuni venditori e i loro particolari cicli di consegna. Questo ti struttura anche in modo da poter confrontare i requisiti di più fornitori uno contro l'altro per lo stesso ordine personalizzato. Usando un ordine logico separato dal fisico, si acquista quella capacità di comparare. È inoltre possibile utilizzare il costrutto logico per generare ordini personalizzati ripetuti che sono indipendenti da un particolare fornitore poiché il modulo ordine fisico è derivato dal modulo logico.

Ecco alcuni esempi di codice per strutturare le classi come discusso.

public class MyMfgOrder
{
     Vendor PrefVendor;
     string StockNumber;
     int Quantity;
     float QuotedCost;
     DateTime QuotedDelivery;
     DateTime MustDeliverBy;
     DateTime MustPayBy;
     object FormToSubmit;
}

public class VendorAMfgOrder
{
    VendorAMfgOrder(MyMfgOrder myOrder) { }
}

public class Vendor
{
    bool RequiresCustForm;
    object CustFormType;
    DateTime DeliveryDeadlineCycle;
    DateTime PaymentDeadlineCycle;
}
    
risposta data 04.09.2013 - 19:56
fonte

Leggi altre domande sui tag