none
Aplicar principios SOLID a clase simple

    Pregunta

  • Tengo una sencilla clase que incluye una única función.

    Dependiendo de uno de los parámetros que se le pasan realiza una serie de cálculos y devuelve un valor decimal.

    Class Calculador
        Shared Function ObtenerValor(param1 As Integer, param2 As Char, param3 As Date) As Decimal
            Dim valor As Decimal = 0
            Select Case param1
                Case 2000
                    ' bla, bla, bla
                    valor = 1
                Case 2001
                    ' bla, bla, bla
                    valor = 202
                Case 2002
                    ' bla, bla, bla
                    valor = 584
                    ' [....]
                    ' muchos mas cases
            End Select
            Return valor
        End Function
    End Class

    Esta clase hay que cambiarla con bastante frecuencia ya que se añaden nuevos cálculos según el valor de 'param1'. Los cálculos para valores anteriores nunca cambian.

    ¿Como sería la implementación adecuada para cumplir con los principios SOLID?


    TomasMM


    jueves, 22 de septiembre de 2016 16:02

Respuestas

Todas las respuestas

  • Tomás Martín,

    ¿Podrías explicar con algo de detalle de que trata los cálculos que realizas?.

    De hecho, el que tengas que realizar cálculos distintos por cada caso ya habla de una mala implementación del método, sin embargo sin saber que realizas y porque lo haces no es posible dar un acercamiento o de pronto una recomendación.

    Esperamos por tu feed-back.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 23 de septiembre de 2016 5:23
  • Hola Williams, no entiendo la transcendencia que puedan tener los cálculos particulares (líneas 'bla, bla, bla en el ejemplo). Son criterios propios de la lógica de negocio empresarial.

    El ejemplo está simplificado. La intención de la pregunta es implementar los principios SOLID a una clase de este tipo. tal vez aplicando algún patron de diseño?


    TomasMM

    viernes, 23 de septiembre de 2016 7:58
  • hola

    Entiendo que desde SOLID podrias aplicar el principio de Abierto/Cerrado este se parecera al patron Strategy

    basicamente defines una interfaz

    Interface ICalculator
    
       Integer Calculate(ByVal i As Integer)
    
    End Interface 



    entonces creas una instancia por cada opcion del case

    Public Class Calculator2000 Implements ICalculator
    
    
    End Class

    aqui

    Como evitar el uso del switch (1/2)

    explico como podrias evitar el switch

    por supuesto alli uso un diccionario para definir coincidencias entre los valroes y las clases, pero si quieres esto podrias configurarlo dinamicamente

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    viernes, 23 de septiembre de 2016 14:13