Sto costruendo una nuova classe che si occupa di decidere quale classe dovrebbe elaborare le richieste da un servizio web. Sto cercando una soluzione per un problema che sto avendo riguardo all'estensibilità con questa nuova classe. Ogni richiesta verrà elaborata in modo diverso e la logica per elaborarle ciascuna si troverà nella propria classe. Il problema che spero di risolvere è come progettare le classi in modo tale che l'aggiunta di un nuovo tipo di richiesta non richieda modifiche al codice esistente. Considera il codice che ho di seguito. Per favore perdona qualsiasi refuso nei seguenti esempi:
public interface IRequestData
{
}
public class OldRequestData : IRequestData
{
// Some properties holding data.
}
public class NewRequestData : IRequestData
{
// Some properties holding data.
}
public class ProcessOldRequestData
{
public void Process(OldRequestData Data)
{
// Some code to process the request.
}
}
public class ProcessNewRequestData
{
public void Process(NewRequestData Data)
{
// Some code to process the request.
}
}
public class RequestProcessor
{
public void ProcessRequest(IRequestData Data)
{
// Get and load base type of Data
// Based on if it's OldRequestData, NewRequestData, or *FutureRequestData*,
// Instantiate the appropriate class to process the request.
}
}
Questo è il modello con cui sto attualmente lavorando. Il problema è che ogni nuovo tipo di richiesta richiede modifiche al RequestProcessor per chiamare la nuova classe. C'è un modo per far sì che questa classe "sappia" quale classe deve chiamare per elaborare ogni tipo di richiesta? Se c'è un modo migliore di gestirlo, sarei molto aperto per altri suggerimenti.
Grazie in anticipo per il tuo contributo.