Cercherò di dare una parola il più sinteticamente possibile.
Al momento ho un oggetto chiamato StoresAdaptor
che eredita da una classe base ERPAdaptor
, che accetta un oggetto Stores
e lo inserisce in un sistema ERP di terze parti tramite un modello di progettazione dell'adattatore.
Ora, ci sono più tipi di questi movimenti Stores
. Ognuno ha la propria implementazione, ma la creazione è quasi identica. Il problema deriva dal fatto che questo oggetto Stores
ha la posizione "A" e l'oggetto Line
ha la posizione "Da", tuttavia, quando si effettua una Movement
, è necessario conoscere entrambi i "A" e "Da".
public class StoresAdaptor : ERPAdaptor
{
protected Stores storesRequest
{
get { return (Stores) this.GenericObject; }
}
public StoresAdaptor(Data_Controller DCO, GenericObject storesRequest, ERPConnection conn)
: base(DCO, storesRequest, conn)
{ }
private class ReturnMiscMaterialAdaptor
{
//This here feels wrong...
private StoresAdaptor _storesAdaptor;
private Stores.Line _storesLine;
public ReturnMiscMaterialAdaptor(StoresAdaptor storesAdaptorRef, Stores.Line storesLine)
{
_storesAdaptor= storesAdaptorRef;
_storesLine= storesLine;
}
// task to bay
public Update()
{
ERPSystem.ToLocation = _storesAdaptor.storesRequest.ToLocation;
ERPSystem.FromLocation = _storesLine.FromLocation;
//Return specific functionality
}
}
private class IssueMiscMaterialAdaptor
{
//As well as here... there has to be a better way to do this...
private StoresAdaptor _storesAdaptor;
private Stores.Line _storesLine;
public IssueMiscMaterialAdaptor(StoresAdaptor storesAdaptorRef, Stores.Line storesLine)
{
_storesAdaptor= storesAdaptorRef;
_storesLine= storesLine;
}
public Update()
{
ERPSystem.ToLocation = _storesAdaptor.storesRequest.ToLocation;
ERPSystem.FromLocation = _storesLine.FromLocation;
//Issue specific functionality
}
// bay to task
}
In sostanza, abbiamo bisogno di mantenere l'oggetto header ( Stores
) esposto a tutte le sottoclassi, mentre si passa in riga ( Line
) alle sottoclassi separate per essere opportunamente attivate.
Quello che ho fatto finora è passato in un riferimento all'oggetto nel costruttore della sottoclasse, ma trovo che sto ripetendo esattamente gli stessi campi e la stessa dichiarazione del ctor (cambiando il nome in modo che corrisponda ovviamente) che dopo la terza volta che ho battuto "Paste" mi ha fatto fermare e fare un passo indietro e rendermi conto che sto facendo qualcosa di sbagliato.
Ho anche pensato di creare questi 'sub-classes' : StoresAdaptor
ma la base StoresAdaptor eredita da una classe astratta senza alcun costruttore senza parametri e, in quanto tale, dovrei duplicare il costruttore della classe base più e più volte.
Qualcuno può suggerire quale modello funzionerebbe meglio in questo scenario? Continuerò a lavorarci ma se sento che qualcosa non funziona, ci deve essere qualcosa di MOLTO sbagliato nel design.