Me acaban de refactorizado código de un colega que, más o menos, se veía así ...¿Es costoso crear objetos en .Net?
public class Utility
public void AddHistoryEntry(int userID, HistoryType Historytype, int companyID)
{
// Do something...
}
public void AddHistoryEntry(int userID, HistoryType historyType, int companyID, string notes)
{
// Do something...
}
}
Para esto ...
public class HistoryEntry
{
public long UserID { get; private set; }
public HistoryType HistoryType { get; private set; }
public long CompanyID { get; set; }
public string Notes { get; set; }
public HistoryEntry(long userID, HistoryType historyType)
{
this.UserID = userID;
this.HistoryType = historyType;
}
}
public class Utility
{
public void AddHistoryEntry(HistoryEntry entry)
{
// Do something...
}
}
}
Ahora, esto es mucho mejor código diseño y es un favorito del tío Bob. Sin embargo, mi colega argumenta que es mucho más caro generar un objeto cada vez que queremos llamar a este método.
¿Está correcto?
una explicación más detallada
Gracias por todas las respuestas hasta el momento. Dejé fuera muchos detalles con la esperanza de la brevedad, pero algunos de ellos han causado problemas con las respuestas.
- La clase de utilidad no existe. Solo quería poner los métodos en una clase para que todos puedan ver. En realidad, está en una clase sensata.
- Hubo, de hecho, 5 métodos AddHistoryEntry en el código original. Todo lo cual tomó muchos parámetros int. Una razón para la refactorización fue que
AddHistory(0, 1, 45, 3);
realmente no dice mucho. - AddHistoryEntry no se llama desde un bucle cerrado, pero se usa ampliamente en toda la aplicación.
correcciones
ahora he actualizado los ejemplos de código, ya que había cometido un error con algunos de los parámetros.
A menos que el código se vaya a ejecutar en una tostadora, siempre elegiría la versión más fácil de leer y fácil de mantener. La Optimización prematura es la raíz de todo mal: http://c2.com/cgi/wiki?PrematureOptimization –
La palabra clave ** this ** casi nunca se requiere en C#. Si le preocupa el código limpio, elimínelo. Esto no es Java. –
@DavidLively: acepto y nunca lo uso en mi código. Sin embargo, el motor de marcado Stack Overflow lo quería. –