Ho una funzione chiamata plugin ogni volta che l'endpoint "Plugin" di WebAPI viene chiamato nel progetto principale e che deve elaborare la richiesta HTTP. La richiesta contiene più informazioni su cosa fare nel metodo e nella stringa di query, e per ora ho copiato e incollato il codice per scegliere i metodi basati su questi:
public object OnCustomControllerCalled(Toolkit tk, HttpRequestMessage req)
{
if (req.Method == HttpMethod.Get)
{
if (req.RequestUri.Query.Contains("data=Customers"))
{
return MyPlugin.GetCustomers(tk);
}
else if(req.RequestUri.Query.Contains("data=UserManagement"))
{
return MyPlugin.GetUserManagement(tk);
}
...
}
else if (req.Method == HttpMethod.Post)
{
if (req.RequestUri.Query.Contains("data=Customers"))
{
return MyPlugin.PostCustomers(tk, req);
}
else if(req.RequestUri.Query.Contains("data=UserManagement"))
{
return MyPlugin.PostUserManagement(tk, req);
}
...
}
else if (req.Method == HttpMethod.Put)
{
if (req.RequestUri.Query.Contains("data=Customers"))
{
return MyPlugin.PutCustomers(tk, req);
}
...
}
else if (req.Method == HttpMethod.Delete)
{
...
So che copiare e incollare non è un buon approccio a questo problema. Come faccio a renderlo facilmente estensibile e meno soggetto a errori?
Rifletti su di esso per raggiungere il principio ASCIUTTA?
O avrebbe senso avere una singola funzione MyPlugin.Customers
invece di una per ogni metodo, e lasciare che quel singolo metodo contenga l'intero comportamento riguardante gli oggetti "cliente", e mantenere la differenziazione tra get, post, put e cancella in quella funzione?