Comunicación entre capa lógica y UI

Comunicación entre capa lógica y UI

de Jerónimo Ismael Acosta Monteavaro -
Número de respuestas: 5

Buenas, quisiera consultar si es posible (aceptado) comunicarle información al código responsable de la consola mediante referencias a objetos (tales como compras o usuarios).

Ejemplo: para listar usuarios, la consola recibe un vector de punteros a usuarios, y se invoca GetNickname para obtener el nick de cada uno.

Motivación: reduciría mucho la cantidad de métodos necesarios para la comunicación, ya que con un solo puntero se da acceso a todos los getters: la consola puede usarlos para obtener diferentes datos del objeto en diferentes escenarios. Además, evita copiar información para transmitir la copia, y evita crear nuevas estructuras que faciliten ese proceso.

Gracias.

P.D: Podrían tomarse más precaciones, como enviar solo referencias constantes, o referencias de tipo interfaz (en lugar de referenciar usando el tipo de la clase concreta).

En respuesta a Jerónimo Ismael Acosta Monteavaro

Re: Comunicación entre capa lógica y UI

de Juan Manuel Rivara De Leon -
Entiendo que la idea es que utilices los datatypes definidos en las fases anteriores para comunicar esa información. Los datatypes son definidos entre otras cosas para enviar información sobre los objetos a la capa de presentación. Esto protege a los objetos de ser adulterados por esta capa.
Sobre los mecanismos de defensa alternativos, los detalles de cada lenguaje y versión puede variar, pero para el caso que describías entiendo que con usar alguna variable auxiliar o typecasting igualmente la capa de presentación podría acceder a la memoria del heap donde está el objeto y modificarlo. El puntero en el fondo es la dirección de memoria donde el objeto vive y al pasar el puntero estás comunicando esa información a la capa de presentación.
Sí creo que sería admisible tener un método o un constructor que a partir de un objeto genere el datavalue correspondiente, para evitar repetir demasiado código.
Saludos.
En respuesta a Juan Manuel Rivara De Leon

Re: Comunicación entre capa lógica y UI

de Jerónimo Ismael Acosta Monteavaro -
Ya veo, tiene sentido. Entonces, me surge otra duda, que explicaré con un ejemplo:

Imaginemos que tenemos una clase con 10 atributos, y funciones tales que cada una espera recibir una combinación diferente de 5 atributos de dicha clase (los datos en los atributos de una instancia).
Si no puedo hacer lo que anteriormente consulté, veo 2 alternativas:

1. Copio la totalidad del objeto a un datatype, envío la copia, y el método usa los campos que necesite.
2. Creo un datatype auxiliar que contenga solamente los campos requeridos por el método, copio los datos allí, y lo envío.

(Nota: podría tener algún punto medio, considero los extremos para resaltar sus problemas)

Para la alternativa 1, debería copiar los datos que necesito, y además datos que se envían y no se usan. Se desperdicia eficiencia copiando datos innecesariamente.

Para la alternativa 2, necesitaría definir 252 datatypes (uno por combinación).

Entonces, dado un escenario como ese: ¿qué podría hacer?.

Gracias.
En respuesta a Jerónimo Ismael Acosta Monteavaro

Re: Comunicación entre capa lógica y UI

de Juan Manuel Rivara De Leon -
Hola.
Reitero que en principio los datatypes a retornar fueron los definidos en las fases anteriores. Se supone que en los DSS y diagramas de comunicación definiste la forma en que los valores eran retornados a la capa de presentación.
En en general la idea es no devolver una cantidad excesiva de datos innecesarios, tampoco es muy común que haya una cantidad explosiva de combinaciones (en el laboratorio hay unos pocos, que son básicamente devolver todo, devolver un par identificador descriptor, y devolver el identificador, y para este último ni siquiera necesitas un datatype).
Igualmente si en la devolución del laboratorio no tuviste observaciones en ese sentido usá lo mismo que definiste ya.
Saludos.
En respuesta a Juan Manuel Rivara De Leon

Re: Comunicación entre capa lógica y UI

de Antonio Mauttone -

Hola, la relevancia de usar datavalues en lugar de instancias en la capa de presentación es conceptual. En este curso, tanto la capa de presentación como la lógica están bajo el control del mismo desarrollador, y de hecho forman parte de un mismo programa ejecutable. Pero en muchos casos eso no es así.

El problema práctico que se plantea es real, pero en este curso se deben definir datatypes cada vez que se necesita extraer información de la capa lógica. Más adelante en la carrera podrán ver formas alternativas.

Saludos