• No se han encontrado resultados

Transformación de los patrones de comunicación En cada patrón de comunicación, los objetos interactúan de manera diferente Para

Capítulo 5  ­ Descripción de los Patrones de Comunicación para las RIA

7.2  Modelo de marcas empleado

7.3.2  Transformación de los patrones de comunicación En cada patrón de comunicación, los objetos interactúan de manera diferente Para

cada objeto del modelo de análisis, se generan uno o más componentes del modelo de arquitectura, dependiendo del tipo de objeto, ya sea <<boundary>>, <<control>> o <<entity>>. En primer lugar se generan los paquetes del lado del cliente y del lado del servidor donde se van a colocar las componentes generadas para el modelo de arquitectura. Para cada uno de esos paquetes se genera un grafo que contiene como nodos las componentes y las interfaces ofrecidas por estas componentes y como arcos las relaciones de dependencia <<use>> y de herencia entre componentes e interfaces. Primero se generan las componentes para los objetos <<boundary>>, luego para los objetos   <<control>>   y   finalmente   para   los   objetos   <<entity>>.   Finalmente   se crean las relaciones de tipo <<inherit>> y de tipo <<use>> entre los componentes y las interfaces. Para cada componente generado, se crean las interfaces que ofrece y un objeto.

59 7.3.3 Generación de Componentes de Arquitectura para el patrón Client­Server

7.3.3 Generación de Componentes de Arquitectura para el patrón Client­

Server

La   Figura   7­1   y   7­2   muestran   el   resultado   del   mapeo   de   un   diagrama   de comunicaciones del modelo de análisis a diagrama de componentes del modelo de arquitectura. El escenario utilizado es un usuario que agrega un producto a su carrito de compras y el estado del carrito es almacenado.

60 7.3.3 Generación de Componentes de Arquitectura para el patrón Client­Server

Figura 7-2: Resultado del mapeo a componentes del diagrama de la Figura 7-1.

Aplicando   la   regla   de   transformación   boundaryObjects2UIVisualComponents   al objeto <<boundary>> ShoppingCartUI se transforma en ProductList, ShoppingCart y   StatusMessage   ambos   con   estereotipo   UIVisualComponent.   Luego,   aplicando controlObject2ComponentsForClientServerPattern   al   objeto   <<control>> ShoppingCartEventProcessor   se   generan   las   componentes   EventCoordinator, ShoppingCartController, AsyncRemoteRequest y ShoppingCartServerController. Por último,   en   este   caso   el   modelo   de   marcas   indica   que   el   objeto   <<entity>> ShoppingCartData utiliza almacenamiento persistente. Luego, aplicando la regla de transformación   generateEntityObject2PesistentStorageComponentComponent   se transforma en ShoppingCartDAO y DataSourceConnector.

61 7.3.3 Generación de Componentes de Arquitectura para el patrón Client­Server

function clientServerCommPattern2ComponentDiagram(communicationPattern, storageTypes, storageTypeActor, serverComposedEvents,

clientComposedEvents) begin

var clientPackages = generateClientPackages(communicationPattern) var serverPackage = generateServerPackage()

var generatedUIVisualComponents = []

foreach object in communicationPattern->objects do

if object->stereotype == 'boundary' and object->type == 'UI' then boundaryObjects2UiVisualComponents(object, clientPackages, generatedUIVisualComponents)

elseif object->stereotype == 'boundary' and object->type == 'Timer' then

boundaryObject2TimerComponent(object, clientPackages) elseif object->stereotype == 'boundary' and object->type == 'ConectorProtocoloRed' then

boundaryObject2ProtocoloRedComponent(object, serverPackage) elseif object->stereotype == 'control' then

controlObject2ComponentsForClientServerPattern(communicationPattern, clientPackages, serverPackage, clientComposedEvents)

fi

elseif object->stereotype == 'entity' then if storageTypes[entity] == 'persistent' or storageTypes[entity] == 'both' then

generateEntityObject2PesistentStorageComponent(serverPackage, object) fi

if storageTypes[entity] == 'volatil' or storageTypes[entity] == 'both' then entityObject2VolatilStorageComponent(storageTypeActor[entity], clientPackages, object) fi fi od generateClientUseRelationships(communicationPattern, clientPackages) generateServerUseRelationships(serverPackage, serverEventAdministatorPackage) end

Tabla 7-2: Función de transformación de diagrama de comunicaciones de modelo de análisis a diagrama de componentes de modelo de arquitectura intependiente de plataforma para el patrón de comunicaciones Cliente-Servidor.

7.3.4 Transformación de modelos de análisis respetando el patrón Client­

Server­Clients a arquitectura de componentes

Las Figura 7­3 y 7­4 ilustran el resultado del mapeo de un caso de uso que sigue este patrón de comunicación. En este caso, es escenario es una aplicación chat, donde un usuario envía un mensaje a uno o más usuarios.

62 7.3.4 Transformación de modelos de análisis respetando el patrón Client­Server­Clients a arquitectura de componentes

Figura 7-3: Diagrama de comunicación de un caso de uso que sigue el patrón client-server- clients.

63 7.3.4 Transformación de modelos de análisis respetando el patrón Client­Server­Clients a arquitectura de componentes

Figura 7-4: Resultado del mapeo de componentes del diagrama de la Figura 7-3.

Aplicando la regla de transformación boundaryObjects2UIVisualComponents al obje­  to <<boundary>> ChatWindowUI_Usuario1 se transforma en <<UIVisualCompo­  Component>> ChatNewMessageTextBox y <<UIVisualComponent>> ChatMessa­  geBox. Luego, aplicando  controlObject2ComponentsForClientServerClientsPattern al objeto <<control>> ChatMessageEventProcessor se generan las componentes  <<ClientController>> ChatMessageController, <<ProcesadorPedidPersistente>>  ProcesadorPedidoPersistente, <<PublishSubscribeAdministrator>>  PublishSubscribeAdministrator y <<DistribuidorEventos>> DistribuidorEventos.  Por último, aplicando la transformación generateEntityObject2PesistentStorage­  ComponentComponent, el objeto <<entity>> SubscriptionList se transforma en  <<SubscriptionList>> SubscriptionList y el objeto <<entity>> Notifications­  HistoryEntity se transforma en <<DAO>>NotificationsHistory.

64 7.3.4 Transformación de modelos de análisis respetando el patrón Client­Server­Clients a arquitectura de componentes

function

clientServerClientsCommPattern2ComponentDiagram(communicationPattern, storageTypes, storageTypeActor, serverComposedEvents,

clientComposedEvents) begin

var clientPackages = generateClientPackages(communicationPattern) var serverPackage = generateServerPackage()

var serverEventsAdministratorPackage = generateAdministradorEventosServidorPackage() var serverAndServerEventsPackage =

generateServerAndServerEventsPackage() var generatedUIVisualComponents = []

foreach object in communicationPattern->objects do

if object->stereotype == 'boundary' and object->type == 'ExternalApp' then

boundaryObject2ExternalAppInterface() fi

if object->stereotype == 'boundary' and object->type == 'UI' then boundaryObjects2UiVisualComponents(object, clientPackages, generatedUIVisualComponents)

elseif object->stereotype == 'boundary' and object->type == 'Timer' then

boundaryObject2TimerComponent(object, clientPackages) elseif object->stereotype == 'boundary' and object->type == 'ConectorProtocoloRed' then

boundaryObject2ProtocoloRedComponent(object, serverPackage) elseif object->stereotype == 'control' then

controlObject2ComponentsForClientServerClientsPattern(communicationPattern , clientPackages, serverPackage, serverEventsAdministratorPackage,

serverComposedEvents)

elseif object->stereotype == 'entity' then if storageTypes[entity] == 'persistent' or storageTypes[entity] == 'both' then

generateEntityObject2PesistentStorageComponentComponent(serverPackage, object)

fi

if storageTypes[entity] == 'volatil' or storageTypes[entity] == 'both' then entityObject2VolatilStorageComponent(storageTypeActor[entity], clientPackages, object) fi fi markAsVisited(object) od generateClientUseRelationships(communicationPattern, clientPackages) generateServerUseRelationships(serverPackage) generateServerEventAdministratorUseRelationships(serverEventAdministratorP ackage) generateServerAndServerEventsUseRelationships(serverAndServerEventsPackage , serverPackage, serverEventAdministratorPackage) end

Tabla 7-3: Función de transformación de diagrama de comunicaciones de modelo de análisis a diagrama de componentes de modelo de arquitectura intependiente de plataforma para el patrón de comunicaciones Cliente-Servidor-Clientes.

65 7.3.5 Transformación de modelos de análisis respetando el patrón Client­Server­ExternalApps a arquitectura de componentes

7.3.5 Transformación de modelos de análisis respetando el patrón Client­

Server­ExternalApps a arquitectura de componentes

Las Figuras 7­5 y 7­6 ilustran el mapeo para este patrón.

Figura 7-5: Diagrama de comunicaciones del modelo de análisis de un caso de uso con patrón de comunicación client-server-externalapps.

66 7.3.5 Transformación de modelos de análisis respetando el patrón Client­Server­ExternalApps a arquitectura de componentes

Figura 7-6: Resultado de la transformación del diagrama de comunicaciones de la Figura 7- 5 a diagrama de componentes de modelo de arquitectura.

Aplicando la regla de transformación boundaryObjects2UIVisualComponents al  objeto <<boundary>> SharePricesUI se transforma en <<UIVisualComponent>>  PricesList. Luego, aplicando  controlObject2ComponentsForClientServerClients­  Pattern al objeto <<control>> NewSharePriceEventProcessor se generan las compo­ nentes <<ClientController>> PricesController, <<ProcesadorPedidPersistente>>  ProcesadorPedidoPersistente, <<PublishSubscribeAdministrator>> Publish­  SubscribeAdministrator y <<DistribuidorEventos>> DistribuidorEventos. Después,  aplicando la transformación generateEntityObject2PesistentStorageComponent, el  objeto <<entity>> SubscriptionList se transforma en <<SubscriptionList>>  SubscriptionList y el objeto <<entity>> NotificationsHistoryEntity se transforma en

67 7.3.5 Transformación de modelos de análisis respetando el patrón Client­Server­ExternalApps a arquitectura de componentes <<DAO>>NotificationsHistory. Finalmente, aplicando la transformación  boundaryObject2ExternalAppInterface al objeto <<boundary>>  ExternalAppInterface se transforma en <<ExternalAppInterface>>  ExternalAppInterface. function clientServerExternalAppsCommPattern2ComponentDiagram(communicationPattern, storageTypes, storageTypeActor, serverComposedEvents,

clientComposedEvents) begin

var clientPackages = generateClientPackages(communicationPattern) var serverPackage = generateServerPackage()

var serverEventsAdministratorPackage = generateAdministradorEventosServidorPackage() var serverAndServerEventsPackage =

generateServerAndServerEventsPackage() var generatedUIVisualComponents = []

foreach object in communicationPattern->objects do

if object->stereotype == 'boundary' and object->type == 'UI' then boundaryObjects2UiVisualComponents(object, clientController, clientPackages, generatedUIVisualComponents)

elseif object->stereotype == 'boundary' and object->type == 'ExternalApp' then

boundaryObject2ExternalAppInterface()

elseif object->stereotype == 'boundary' and object->type == 'Timer' then

boundaryObject2TimerComponent(object, clientPackages) elseif object->stereotype == 'boundary' and object->type == 'ConectorProtocoloRed' then

boundaryObject2ProtocoloRedComponent(object, serverPackage) elseif object->stereotype == 'control' then

controlObject2ComponentsForClientServerExternalAppsPattern(communicationPa ttern, clientPackages, serverPackage, serverComposedEvents,

clientComposedEvents, serverEventsAdministratorPackage) elseif object->stereotype == 'entity' then

if storageTypes[entity] == 'persistent' or storageTypes[entity] == 'both' then

generateentityObject2PesistentStorageComponentComponent(serverPackage, object)

fi

if storageTypes[entity] == 'volatil' or storageTypes[entity] == 'both' then entityObject2VolatilStorageComponent(storageTypeActor[entity], clientPackages, object) fi fi od generateClientUseRelationships(communicationPattern, clientPackages) generateServerUseRelationships(serverPackage) generateServerEventAdministratorUseRelationships(serverEventAdministratorP ackage) generateServerAndServerEventsUseRelationships(serverAndServerEventsPackage , serverPackage, serverEventAdministratorPackage) end

Tabla 7-4: Función de transformación de diagrama de comunicaciones de modelo de análisis a diagrama de componentes de modelo de arquitectura intependiente de plataforma para el patrón de comunicaciones Cliente-Servidor-ExternalApps.

68 7.3.6 Transformación de modelos de análisis respetando el patrón ExternalApps­Server­Clients a arquitectura de componentes

7.3.6 Transformación de modelos de análisis respetando el patrón