Mi compañía está en una patada de Prueba de unidad, y estoy teniendo problemas con la refactorización del código de Service Layer. Aquí está un ejemplo de un código que escribí:Servicio de refactorización Clases de capa
public class InvoiceCalculator:IInvoiceCalculator
{
public CalculateInvoice(Invoice invoice)
{
foreach (InvoiceLine il in invoice.Lines)
{
UpdateLine(il);
}
//do a ton of other stuff here
}
private UpdateLine(InvoiceLine line)
{
line.Amount = line.Qty * line.Rate;
//do a bunch of other stuff, including calls to other private methods
}
}
En este caso simplificado (que se reduce de una clase 1000 línea que tiene 1 método público y ~ 30 privadas), mi jefe dice que debería ser capaz de probar mi CalculateInvoice y UpdateLine por separado (UpdateLine realmente llama a otros 3 métodos privados y también realiza llamadas a la base de datos). ¿Pero cómo haría esto? Su refactorización sugerido parecía un poco complicado para mí:
//Tiny part of original code
public class InvoiceCalculator:IInvoiceCalculator
{
public ILineUpdater _lineUpdater;
public InvoiceCalculator (ILineUpdater lineUpdater)
{
_lineUpdater = lineUpdater;
}
public CalculateInvoice(Invoice invoice)
{
foreach (InvoiceLine il in invoice.Lines)
{
_lineUpdater.UpdateLine(il);
}
//do a ton of other stuff here
}
}
public class LineUpdater:ILineUpdater
{
public UpdateLine(InvoiceLine line)
{
line.Amount = line.Qty * line.Rate;
//do a bunch of other stuff
}
}
puedo ver cómo la dependencia se ha roto, y puedo probar ambas piezas, pero esto también crearía 20-30 clases extra de mi clase original. Solo calculamos las facturas en un solo lugar, por lo que estas piezas no serían realmente reutilizables. ¿Es esta la manera correcta de hacer este cambio, o sugerirías que haga algo diferente?
¡Gracias!
Jess
Todos nuestros objetos de entidades son básicamente DTO, por lo que toda la lógica de negocios está en clases de servicio. Pero hay mucha otra lógica en la calculadora de la línea de factura, simplemente le mostré esa pieza. –