# Model Driven Architecture

MDA (Model Driven Architecture, Arquitetura Dirigida pelo Modelo) É uma metodologia de desenvolvimento de software criada pela OMG (Object Management Group,). A chave para a MDA é a importância da modelagem no processo de desenvolvimento do software.

## Visão Geral

A MDA é uma visão em como o software pode ser desenvolvido colocando a modelagem no centro do processo de desenvolvimento. A partir de um modelo abstrato do sistema é gerado um modelo mais concreto, através deste processo de refinamento dos modelos podemos gerar o código fonte a ser produzido. O código fonte é considerado como a mais concreta representação do sistema de software. A chave para esse processo é que cada etapa da geração é automatizada o máximo possível.
A MDA pode ser definida em três etapas. A primeira etapa é construção de um modelo com um alto nível de abstração, independente de qualquer tecnologia. Esse modelo é chamado de Modelo Independente de Plataforma (PIM, Platform Independent Model). A segunda etapa, considerada a mais complexa, é a transformação do PIM em um ou mais Modelos Específicos de Plataforma (PSM, Platform Specific Model). Um PSM é mais específico para o sistema em termos de tecnologia de implementação, como um modelo de banco de dados ou um modelo EJB (Enterprise JavaBeans). A terceira e última etapa é transformar um PSM em código. Devido ao PSM estar muito próximo da sua tecnologia, essa transformação é trivial. Muitas ferramentas são capazes de efetuar a transformação de um modelo específico de plataforma (PSM) em código. Porém na MDA temos uma etapa anterior a esta transformação, que é a criação do modelo PIM e a sua transformação para um modelo PSM. Devido as suas características, a MDA oferece os seguintes benefícios:
Produtividade: A transformação do PIM para o PSM precisa ser definida uma única vez e pode ser aplicada no desenvolvimento de diversos sistemas. Devido a este fato, tem-se uma redução no tempo de desenvolvimento.
Portabilidade: Dentro da MDA a portabilidade é alcançada através do foco dado no desenvolvimento do PIM, que é independente de plataforma. Um mesmo PIM pode ser automaticamente transformado em vários PSMs de diferentes plataformas.
Interoperabilidade: Diferentes PSMs gerados a partir de um mesmo PIM podem conter ligações entre eles, denominadas em MDA de pontes. Quando PSMs são gerados em diferentes plataformas, eles não podem se relacionar entre si. É necessário então transformar os conceitos de uma plataforma para a outra plataforma. MDA endereça este problema gerando não somente PSMs, como também as pontes necessárias entre eles. Uma ponte pode ser construída através das especificações técnicas das plataformas referentes aos modelos PSMs e de como os elementos existentes no modelo PIM foram transformados nos modelo PSMs.
Devido ao processo MDA ser dirigido pelo PIM, modelar se torna de fato programar em um nível mais alto, pois o PIM especifica o código que precisa ser produzido, reduzindo o tempo gasto com a programação e codificações. O esforço do desenvolvimento ficará focado em produzir um bom modelo do sistema, independente e de alto nível.

### Tecnologias relacionadas

O modelo MDA está relacionado a outros padrões, entre eles Unified Modeling Language (UML), o Meta-Object Facility (MOF), XML Metadata Interchange (XMI), Enterprise Distributed Object Computing (EDOC), o Software Process Engineering Metamodel (SPEM), e o Common Warehouse Metamodel (CWM). Observe que o termo "arquitetura" em MDA não corresponde a arquitetura do sistema que se está modelando, mas sim da arquitetura dos padrões e modelos que formam o padrão MDA.

## Controvérsia de geração de código

Geração de código significa que o usuário modela abstratamente soluções, que são associadas a um modelo de dados, e então uma ferramenta automatizada deriva dos modelos segmentos ou todo o código fonte para o sistema do software. Em algumas ferramentas, o usuário pode providenciar um esqueleto do programa fonte, na forma de um molde do código fonte onde lacunas pré-definidas são substituídas com partes do programa fonte durante o processo de geração de código.
Uma crítica citada recorrentemente é que diagramas UML apresentam uma ausência de detalhe que é necessário para conter a mesma informação contida em um programa fonte. Alguns desenvolvedores até afirmam que "o código é o design".