es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Dónde debería estar el código que procesa el estado del objeto?

Tengo una clase de la siguiente manera:

data class ProductState(
  val id: Int,
  val products: MutableMap<int,></int,><int>> = mutableMapOf(),
  val customerTopics: Topic = Topic()
)

Básicamente, es una clase de datos.

Ahora tengo una función que, entre otras cosas, procesa los products y customerTopics y crea alguna salida basada en el procesamiento.

Pero me parece que no es una buena idea tener la lógica en la función.

Mi pregunta es:

¿Creamos métodos dentro de la clase de datos para el procesamiento del estado del objeto? Si es así, ¿sería algún objeto compañero? ¿O hay algún otro patrón de diseño que aborde esto de manera mejor?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Según el Principio de Responsabilidad Única (SRP) en la Programación Orientada a Objetos, no es una buena idea incluir la lógica de procesamiento dentro de la clase de datos. La clase de datos solo debe contener los campos que representan el estado de un objeto.

    Una opción para manejar el procesamiento del estado del objeto es crear una clase u objeto separado que tome el objeto ProductState y lo procese. De esta manera, desacoplamos la lógica de procesamiento de la clase de datos y aplicamos el SRP.

    Por ejemplo, supongamos que creamos una clase ProductStateProcessor:

    class ProductStateProcessor(private val productState: ProductState) {
      fun process() {
        // lógica de procesamiento utilizando los campos de productState
        // ...
      }
    }
    

    Luego podemos llamar a esta clase procesadora desde nuestra función que necesita procesar el objeto ProductState.

    Otra opción es crear una interfaz separada que defina el comportamiento de procesamiento e implementarla en la clase ProductState.

    Por ejemplo:

    interface ProductProcessor {
      fun process()
    }
    
    data class ProductState(
      val id: Int,
      val products: MutableMap<int,></int,><int>> = mutableMapOf(),
      val customerTopics: Topic = Topic()
    ) : ProductProcessor {
      override fun process() {
        // lógica de procesamiento utilizando los campos del objeto
        // ...
      }
    }
    

    De esta manera, podemos llamar al método process() directamente en el objeto ProductState.

    En resumen, no se recomienda incluir la lógica de procesamiento dentro de una clase de datos. En su lugar, deberíamos considerar crear una clase o interfaz separada para manejar el procesamiento del estado del objeto.

Comments are closed.