13
1 Design Patterns & MDSoC Design Patterns & MDSoC Casos de uso em software ITS Casos de uso em software ITS Tiago Delgado Dias Software Architect [email protected]

1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware [email protected]

Embed Size (px)

Citation preview

Page 1: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

1

Design Patterns & Design Patterns & MDSoCMDSoC

Casos de uso em software ITSCasos de uso em software ITSTiago Delgado Dias Software Architect [email protected]

Page 2: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

2

Agenda

Design Patterns – o que são?

Identificação e apresentação de padrões usados na plataforma iBrisa

Para além dos padrões:- Multi-Dimensional Separation of Concerns

- MDSoC com partial types (.NET 2.0)

- Hyper/Net, MDSoC para além das classes

Page 3: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

3

Design Patterns

Soluções para problemas típicos Abordagem com origem na Arquitectura (Christopher

Alexander'77) Aplicação à programação em 1987 por Kent Beck (Extreme

Programming, Agile) e Ward Cunningham (Wiki) apresentada na OOPSLA'87

Popularização em 1994 com o livro do Gang-of-Four (Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides)

São assim padrões catalogados e com sugestões de aplicação em linguagens correntes (Java, C#, etc.), tipicamente OO

São um recurso utilizado na fase de desenho Principais factores a favor:

- Ampla utilização,

- presença (através de templates) nas frameworks (Java, .NET),

- garantias empíricas

Page 4: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

4

iBrisa – Padrões: Componente

Se considerado como um padrão (B. Appleton, “Component Design Patterns”) será o padrão mais utilizado no software contemporâneo

Promove a modularização através da oferta de funcionalidades a camadas de mais alto nível (ou ao utilizador final)

Utilizado no iBrisa a nível de arquitectura:- Separação em camadas, tipicamente:

– Dados– Serviços– Interface

através da utilização de bibliotecas e frameworks

Page 5: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

5

iBrisa – Padrões: Componente (2)

através da utilização de Web Controls, ex.:- Controlo de autenticação

- Localização deelementos

- Listagem de PMVs

Toll.Services

Traffic

Tolls.CADTolls.CAD

Tolls.SinopticTolls.Sinoptic

Atlas.VideoAtlas.Video

Video.Services

Atlas.Logging

Atlas.MatrixAtlas.Matrix

Atlas.Security

CADCAD

Atlas.SecurityAtlas.Security

Atlas.AuditAtlas.Audit

iBrisa.SIC

SGISGI

SGMASGMA

SGDTSGDT

Cross-cut do módulo de portagens

AUTENTICAÇÃO

AUTENTICAÇÃO

AUTENTICAÇÃO

AUTENTICAÇÃO

AUTENTICAÇÃO

AUTENTICAÇÃO

AUTENTICAÇÃOAUTENTICAÇÃO

Page 6: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

6

iBrisa – Padrões: Provider/Adapter

Um adaptador funciona como mediador entre interfaces distintas:

É o mecanismo chave para a independência de fornecedores de equipamentos/serviços no Traffic Atlas

É devido a este padrão que é possível:- com a mesma interface gerir a video-wall do CCO e a componente da

concessão Brisa nas Estradas de Portugal

- notificar a ocorrência de uma incidência via email, SMS ou de um serviço Datex

Por se ter aplicado este padrão seria possível:- Trocar por completo a solução de call-center usada no CCO e não

alterar a componente de gestão de canais de comunicações

- Introduzir equipamentos (CCTVs, PMVs, EMs) de novos fornecedores na rede sendo geridos através do Traffic Atlas

Consumidor de serviçoConsumidor de serviço

Adaptador #1 Fornecedor de serviço #1Fornecedor de serviço #1

Consumidor de serviçoConsumidor de serviçoAdaptador #N

Fornecedor de serviço #NFornecedor de serviço #N

Page 7: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

7

iBrisa – Padrões: Observer e Hook

Ambos os padrões definem um ponto de registo para acções a tomar caso se verifiquem determinadas condições

No caso do Hook as acções que tratam o evento vão definir em conjunto uma resposta para a origem do evento (por exemplo validar um conjunto de condições necessárias para a efectivação do evento)

O padrão do Observador é utilizado no Traffic Atlas:- através do mecanismo de eventos do .NET

- em situações em que é necessário efectuar acções não operacionais para uma dada situação (ex. sincronizar o estado de um equipamento, registar uma operação efectuada ou registar um alarme)

- quando existe mais do que uma acção para o evento separa o código de cada acção, nos casos restantes separa o código operacional de funcionalidades transversais, como o registo de ocorrências (logging)

São utilizados Hooks no Traffic Atlas:- através da implementação de uma classe específica

- para o tratamento de alterações do estado da sessão dos utilizadores (valida-se se um operador pode abandonar o seu posto sem deixar zonas por operar, etc.)

Page 8: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

8

Padrões e limitações

Objectivos comuns aos padrões apresentados:- Modularização

- Separação de conceitos

Contudo estes objectivos não são antingidos na totalidade:- A estrutura de componentes nem sempre permite a separação

desejada– Pode não ser possível ter uma visão unificada de todo código envolvido

numa dada funcionalidade (ex. controlo de portagens), quando existem requisitos de alteração de funcionalidade esta possibilidade é desejável

– Por vezes não é possível testar uma funcionalidade ou um conjunto de funcionalidades de forma isolada

- O código que lança os eventos ou hooks encontra-se disperso pelo código operacional

– Por exemplo para acrescentar a alteração do estado de um SOS como fonte de um evento de acção (usado para registar acções em BD e para alterar o estado dos equipamentos) é necessário alterar o projecto de serviços de SOS

– É contudo possível adicionar um novo tratamento do evento de acções sem ser necessária qualquer alteração aos módulos que despoletam o evento

Page 9: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

9

Para além dos padrões

Aspect oriented software- Separação de funcionalidades cross-cutting

- Extensão às linguagens orientadas aos objectos (OO)

- As soluções de AOP mais conhecidas são baseadas no AspectJ, de Gregor Kiczales, 1997

Multi-Dimensional Separation of Concerns (MDSoC)- Abordagem AOP desenvolvida desde 1999 por Peri Tarr e Harold

Ossher, com uma implementação: Hyper/J

- Promove uma separação equilibrada e equalitária das estruturas de classes num hiper-espaço populado por funcionalidades/requisitos

- O programador manipula o software a este nível dentro do hiper-espaço, uma classe pode existir em várias funcionalidades distintas e ser vista parcialmente em cada uma

- Tal como outras abordagens AOP para além da separação tem uma fase de composição em que o hiper-espaço é condensado numa implementação OO clássica

Page 10: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

10

MDSoC – Aplicação a ITS

Inicialmente utilizaram-se os partial types do .NET 2.0 para uma primeira experiência de MDSoC na área de ITS

Classe Portagem com 2 funcionalidades: Cobrança e Contagem

Page 11: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

11

MDSoC – Aplicação a ITS (2)

Alguns métodos continuavam a combinar funcionalidades distintas:public int ChargeToll(Toll originToll){

int amountToCharge = this.AmountFromOtherToll(originToll);amountCharged += amountToCharge;// This region shouldn't be aware of this traffic management variablenumVehiclesPassedThisHour++;

return amountToCharge;}

Page 12: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

12

Hyper/Net

Desenvolveu-se um protótipo para .NET que permite acomposição de métodos entre tipos parciais: Hyper/Net

- Baseado no Hyper/J, oferece os métodos de composição: – Override, Merge, Bracket

- Utiliza os partial types para a composição de classes

- Utiliza um conjunto de atributos para definir os métodos de composição e as suas propriedades

– ex. a política de composição de retornos dos métodos compostos

Utilizando o Hyper/Net já foi possível separar totalmente as 2 funcionalidades

- Na classe da funcionalidade de contagem acrescentou-se:[HyperNet.MethodMerge(HyperNet.MethodMergeAction.Merge, -3, ChargeTollMerge)]

public int ChargeToll(Toll originToll)

{

numVehiclesPassedThisHour++;

return 0;

}

Page 13: 1 Design Patterns & MDSoC Casos de uso em software ITS Tiago Delgado DiasSoftware ArchitectTiago.Dias@brisa.pt

13

Hyper/Net (2)

Uma terceira funcionalidade, de congestion charging, foi adicionada sem quaisquer alterações às 2 funcionalidades existentes

Vantagens:- É possível ter uma separação total baseada numa estrutura de

funcionalidades

- É possível remover (1 click) e adicionar funcionalidades (alguns clicks ;) ) sem alterações ao código existente

- Podem-se continuar a aplicar padrões existentes

- Finalmente é possível mapear requisitos directamente no código