Arquitetura baseada em orientação a modelos, com objetivo de lidar melhor com a complexidade e interdependência de sistemas complexos.
Sem levar em conta o objetivo final do sistema, o processo em si consiste em criar um modelo independente de plataforma expresso pela UML, que depois é transformado em algo mais específico para uma plataforma como .NET, JEE2, SOAP.
O processo em si consiste em criar um CIM que irá contér o “core” do negócio, mostrando requisitos que o sistema necessita mas sem detalhar estrutura, passamos então a criação do PIM, ainda em um alto nível de abstração, descrevendo o sistema de software sem entrar em detalhe de nenhuma tecnologia, para então irmos ao PSM que usa a tecnologia como base para o desenvolvimento, sendo transformado em código.
CIM - Modelo de Computação Independente
Referido também como modelo de negócio ou domínio, apresenta exatamente o que se espera que o sistema realize, mas mantém escondida toda a parte de informação referente a tecnologia, permanecendo assim independente.
PIM - Modelo Independente de Plataforma
Irá demonstrar apenas o suficiente em termos de independência, para que o mapeamento a outras plataformas se torne possível. É atingido criando alguns serviços de maneira a abstrair detalhes técnicos.
PSM - Modelo Específico de Plataforma
Aqui o Modelo Independente será incluído junto a detalhes que uma plataforma específica necessita para executar.
Em resumo:
- Etapa 1 Construção do modelo o mais abstrato possível.
- Etapa 2 Modelo é transformado em algo mais específico de uso e em termos de implementação.
- Etapa 3 Modelo virá código.
Um padrão que transcende as noções de CIM/PIM/PSM, são dois conceitos chave do MDA: modelos e transformações.
Transformação dentro do assunto MDA é a atividade de produzir diferentes modelos, ideias ou artefatos, geralmente de uma representação a outra, como um PIM se transforma em vários PSM. O conceito ou ideia inicial do PIM se mantém, porém no PSM terá outra forma (mobile, desktop, cloud).
Pontos fortes
Produtividade: Modelo específico precisa ser definido apenas uma vez. (PSM)
Portabilidade: Modelo independente (PIM) pode gerar divisões específicas para diferentes plataformas
Interoperabilidade: Os diferentes PSM podem trabalhar em conjunto com diversas plataformas, pois o modelo independente "cria" pontes através das especificações técnicas.
Adaptação e mudanças são os principais aspectos da engenharia orientada a modelo, a evolução do software, na literatura onde é chamada de maintenance, tem três principais razões para acontecer:
Razão 1 - Correção - Indica uma alteração no sistema para solucionar um processo, performance ou implementação;
Razão 2 - Adaptiva - Alteração engatilhada por motivos técnicos ou regras de negócio;
Razão 3 - Perfectiva - Realizada para melhorar qualidade (Eficiência de processamento, aperfeiçoamento de performance, etc) e da mantenabilidade do sistema.
Pontos fracos
Manutenção do modelo UML;
Alteração geralmente requerem intervenções manuais e tediosas, o modelo UML precisa refletir as mudanças para cada instância na qual o padrão ou regra arquitetural é usado.
Problemas de arquitetura - Segurança, transações, modelos de persistência não são bem encapsulados, sendo difícil a abstração e o reuso em diferentes plataformas.
Proliferação de middleware - Quase impossível depender de apenas um sistema de middleware e padronizar, com o tempo e a evolução constante, fica cada vez mais difícil e mais caro realizar uma migração.
Reuso - O design de padrões pode levar ao desenvolvimento de modelos inadequados à tarefa proposta pela regra de negócio.
Esse é um resumo que criei enquanto estudava sobre a arquitetura baseada em modelos, pois é a arquitetura que estou desenvolvendo hoje junto a empresa que atuo.
Referências:
"The Fast Guide to Model Driven Architecture" por Frank Truyen;
"Object Management Group Model Driven Architecture (MDA) MDA Guide rev. 2.0" disponível no site da OMG.
Top comments (5)
Abordagem muito interessante. O fato de poder utilizar diferentes tecnologias para elaboração de diferentes módulos de um sistema pode tirar muita vantagem das características cada linguagem, também. Creio que seja muito utilizada hoje.
Pelo que tenho visto, é um tipo de arquitetura muito em desuso, sendo comum em sistemas legados (o que estou trabalhando é). Os métodos ágeis acabaram diminuindo muito o uso de linguagens tipo UML e derivados, mas aí não sei opinar se é algo mais pra bom ou mais pra ruim.
Creio que essa metodolgia se encaixe de alguma forma no manifesto ágil e com a arquitetura de microsserviços. Se pensarmos que cada parte do sistema é um módulo é possível tirar proveito da arquitetura de microsserviços (metodologia mais atual). Além disso, como cada parte é independente é possível implementar diferentes tecnologias e diferentes partes do sistema, é possível usar isso também para grandes mudanças em sistemas, como uma troca de linguagem.
Acho que essa arquitetura é bom para softwares livres. Conseguimos implementar diferentes soluções para montar uma personalizada.
Exato, o software ERP hoje que trabalho é feito com base em um projeto open source, acredito que quando estava no auge muitos projetos assim foram feitos com base em MDA, e com o tempo sendo substituídos por outras arquiteturas.
Logo quando comecei estudar sobre essa arquitetura notei semelhanças com o que li por cima de microsserviços. Acredito que possam ser conceitos parecidos e inspirados que vão evoluindo.