Tengo un viejo acertijo, así que pensé en compartirlo con usted, puede ser que vaya en la dirección correcta. La cosa es que algunas de nuestras entidades en la base de datos son bastante grandes (lee tienen muchas propiedades) y rara vez la lógica empresarial usa todas las propiedades de la entidad, por lo que cada vez que necesito pensar qué propiedades deben cargarse para que la lógica empresarial funcione correctamente. muestra muy hipotética:Entidades haciendo demasiado?
public class Product
{
public string Title {get;set;}
public string Description {get;set;}
public string RetailPrice {get;set;}
public string SupplierId {get;set;}
public Supplier Supplier { get;set;}
// many other properties
}
public class ProductDiscountService
{
public decimal Get(Product product)
{
// use only RetailPrice and Supplier code
return discount;
}
}
public class ProductDescriptionService
{
public string GetSearchResultHtml(Product product)
{
// use only Title and Description
return html;
}
}
Parece como si pudiera extraer las interfaces IDiscountProduct y ISearchResultProduct, producto de marca como la implementación de esas interfaces, a continuación, crear dtos más pequeños de ejecución cada una de esas interfaces, pero que se ve en este momento como una exageración (por lo menos No he visto a nadie agrupando propiedades usando interfaces).
dividir entidad en la base de datos a entidades más pequeñas tampoco parece razonable, ya que todas esas propiedades pertenecen al producto y me temo que me veré obligado a utilizar muchas combinaciones para seleccionar algo y si voy a decidir eso alguna propiedad pertenece a otra entidad, ese movimiento será bastante difícil de implementar.
Tener todas las propiedades utilizadas en la lógica empresarial del método particular como parámetro de método también parece una mala solución.
¿De cuántas propiedades estamos hablando? – walther
generalmente más de 10, menos de 20. – Giedrius
Diría: si su método sabe de antemano qué propiedades usar y esto permanece fijo, entonces el uso de parámetros podría ser una buena solución. Fácil de probar y fácil de reutilizar. Sin embargo, si la implementación no está definida en la firma del método (la implementación actual usa 2 propiedades pero mañana podrían convertirse en 3), desea consumir todo el producto con todas las propiedades disponibles. Esto habla de manera consistente: este método requiere estos parámetros y este método requiere un producto. – Polity