Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

91
Vistas
Implementación de principio abierto cerrado

Estoy tratando de refactorizar el código a continuación para adherirme al principio de apertura y cierre

Es un poco de código extraído con el propósito de hacer una pregunta, pero básicamente aquí el método de cálculo se comporta de manera diferente según el tipo de factura.

 public class Invoice { private string _type; public double Calculate(double amount) { if(_type == "invoice") { return amount + 10; } else { return amount - 10; } } }

lo he hecho hasta aquí

 public interface IInvoice { double Calculate(double amount); } public class Invoice : IInvoice { public double Calculate(double amount) { return amount + 10; } } public class DiscountInvoice : IInvoice { public double Calculate(double amount) { return amount - 10; } }

Obtengo el modelo a continuación desde un punto final de API, donde "Tipo" determina el clima para usar Factura o Factura de descuento. Me gusta evitar poner la condición if en el campo de tipo

 public class InvoiceModel { public int Id { get; set; } public string Type { get; set; } public double Amount { get; set; } } static void Main(string[] args) { private IInvoice _invoice; //I am not sure how to detect and use the correct invoice type here. without doing below //based on something i have to assign _invoice = new Invoice() or new DiscountInvoice() }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En primer lugar, su estructura se ve bien y cumple con el principio abierto-cerrado.

En términos de determinación de qué implementación de la abstracción usar, debe considerar la lógica comercial, ya que la decisión depende directamente de eso. Si tiene varias implementaciones de IInvoice, supongo que las necesitará todas en algún momento de su aplicación. Entonces, según su lógica comercial, debe decidir cuál usar. Puede considerar el patrón Factory, que se encargará de eso y le devolverá el tipo correcto. Toda la lógica empresarial se encapsulará allí. Justo cuando implemente su fábrica, también tenga en cuenta el LSP ( principio de sustitución de Liskov ), ya que es bastante fácil romperlo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda