Recentemente ho dovuto refactoring alcuni codici legacy. Come nella maggior parte dei casi, ho dovuto dividere grandi parti del codice in funzioni più piccole, più pulite e leggibili. Ho finito con molte funzioni, che avevano più parametri strani. Fammi mostrare un esempio:
public void SendOrder(Order order, XmlOrder xmlOrder, Insider insider)
{
string customerCode = CustomerServices
.Get(insider.CustomerId)
.Code;
OutputData outputData = CreateOutputData(order, xmlOrder, customerCode);
CreateReservations(order, customerCode, outputData);
PlaceOrder(order, xmlOrder, outputData, customerCode);
}
...
private void CreateReservations(Order order, string customerCode, OutputData outputData)
{
...
try
{
ReservationServices.AddReservation(reservation);
}
catch (BusinessException ex)
{
Logger.Log(ex);
outpuData.Status = Statuses.BusnessError;
throw;
}
}
(Questo è solo un codice dimostrativo, non reale)
Il problema è che dovevo passare ad outputData ad altre funzioni solo per cambiare il suo stato se si verifica un'eccezione o passare customerCode a più funzioni. La classe è responsabile dell'invio di più messaggi non connessi a WebService, quindi, quando lo stavo creando, non avevo intenzione di inserire le variabili connesse a un determinato ordine come stato di una classe. È una buona pratica escludere tali variabili dalla funzione e renderle membri della classe? Ci sono delle linee guida per tali situazioni? Quali sono le tue pratiche e soluzioni per tali problemi?