J'ai mon code qui effectue un appel de service Web basé sur le type de demande.Comment faire pour résoudre le type à l'exécution pour éviter multipe
Pour ce faire, j'ai le code suivant;
public class Client
{
IRequest request;
public Client(string requestType)
{
request = new EnrolmentRequest();
if (requestType == "Enrol")
{
request.DoEnrolment();
}
else if (requestType == "ReEnrol")
{
request.DoReEnrolment();
}
else if (requestType == "DeleteEnrolment")
{
request.DeleteEnrolment();
}
else if (requestType == "UpdateEnrolment")
{
request.UpdateEnrolment();
}
}
}
Ainsi, selon ouvert principe proche, je peux sous-classe comme:
Class EnrolmentRequest:IRequest
{
CallService();
}
Class ReEnrolmentRequest:IRequest
{
CallService();
}
Class UpdateEnrolmentRequest:IRequest
{
CallService();
}
Maintenant, ma classe client ressemblera à quelque chose comme ceci:
public class Client
{
public Client(string requestType)
{
IRequest request;
if (requestType == "Enrol")
{
request = new EnrolmentRequest();
request.CallService();
}
else if (requestType == "ReEnrol")
{
request = new REnrolmentRequest();
request.CallService();
}
else if (requestType == "DeleteEnrolment")
{
request = new UpdateEnrolmentRequest();
request.CallService();
}
else if (requestType == "UpdateEnrolment")
{
request = new UpdateEnrolmentRequest();
request.CallService();
}
}
}
Maintenant, je dois encore utiliser si et sinon, et devra changer mon code s'il y a un nouveau type de requête.
Donc, ce n'est définitivement pas fermé à la modification.
Est-ce que je manque quelque chose à propos de SOLID? Puis-je utiliser l'injection de dépendance pour résoudre les types lors de l'exécution?
D'où provient 'requestType'? Est-ce pseudocode pour 'request.GetType()'? – InBetween
Peut-être que cela devrait mieux être posté dans http://codereview.stackexchange.com/ –
la décision de quelle classe à instancier doit être faite quelque part - il n'y a pas moyen de contourner cela. La décision peut être déplacée vers une usine qui utilise la réflexion ou l'enregistrement, mais elle ne peut pas être éliminée. –