Sobre Linguagens Específicas de Domínio

Ao contrário de uma linguagem de uso geral, como C# ou UML, uma DSL (linguagem específica do domínio) foi projetada para expressar instruções em um espaço de problema específico ou domínio.

DSLs bem conhecidas incluem expressões regulares e SQL. Cada DSL é muito melhor do que uma linguagem de uso geral para descrever operações em cadeias de texto ou em um banco de dados, mas muito pior para descrever ideias que estão fora de seu próprio escopo. As indústrias individuais também têm suas próprias DSLs. Por exemplo, no setor de telecomunicações, as linguagens de descrição de chamadas são amplamente usadas para especificar a sequência de estados em uma chamada telefônica e, no setor de viagens aéreas, uma DSL padrão é usada para descrever reservas de voo.

Sua empresa e seu projeto também lidam com conjuntos especiais de conceitos que podem ser descritos com uma DSL. Por exemplo, você pode definir uma DSL para um destes aplicativos:

  • Plano de caminhos de navegação em um site.

  • Diagramas de fiação para componentes eletrônicos.

  • Redes de correias transportadoras e equipamentos de manuseio de bagagem para um aeroporto.

Ao criar uma DSL, você define uma classe de domínio para cada um dos conceitos importantes no domínio, como uma página da Web, uma lâmpada ou uma mesa de check-in do aeroporto. Você define relações de domínio como hiperlink, fio ou uma correia transportadora para vincular os conceitos.

Os usuários do seu DSL criam modelos. Modelos são instâncias do DSL. Por exemplo, eles descrevem um site específico ou a fiação de um determinado dispositivo ou o sistema de manipulação de bagagem em um aeroporto específico.

Os usuários podem exibir um modelo como um diagrama ou como um formulário do Windows. Os modelos também podem ser vistos como XML, que é como eles são armazenados. Ao definir uma DSL, você define como as instâncias de cada classe de domínio e relação aparecem na tela do usuário. Uma DSL típica é exibida como uma coleção de ícones ou retângulos conectados por setas.

A figura a seguir mostra um pequeno modelo em uma DSL (Linguagem de Domínio Específico) diagramática:

Modelo de Árvore Familiar Tudor

O que você pode fazer com DSLs

Uma aplicação típica de uma DSL é gerar código de programa ou outros artefatos. Ao definir sua DSL, você pode definir modelos de texto que leem um modelo da DSL e geram arquivos de texto.

Por exemplo, você pode escrever modelos que pegam um plano de aeroporto e geram parte do software para manipulação de bagagem, bem como alguns dos documentos do usuário que descrevem o plano.

Quando você tiver definido uma DSL, poderá distribuí-la para outros usuários que podem instalá-la em seus próprios computadores. Os usuários da DSL podem criar e editar modelos no Visual Studio.

Você também pode definir comandos de menu e outras ferramentas que ajudam os usuários a editar a DSL, restrições de validação para ajudar a garantir que a DSL seja usada corretamente e modelos de item que ajudam os usuários a criar novas instâncias. Você pode encapsular uma ou mais DSLs juntamente com suas ferramentas e outras extensões do Visual Studio em um pacote integrado.

Normalmente, uma linguagem específica do domínio é criada quando uma equipe de desenvolvimento precisa escrever código semelhante para vários produtos. Por exemplo, uma empresa especializada em sistemas de manuseio de bagagem pode definir uma DSL para rastreamento de bagagem, a partir da qual é possível gerar parte do código para cada instalação. Os benefícios da DSL são que ela pode ser compreendida por seus clientes, que o código gerado a partir dele é confiável e que o sistema pode ser atualizado rapidamente se os requisitos dos clientes forem alterados.

Ferramentas de Linguagem Específica de Domínio permite que você crie uma linguagem específica de domínio que conte com seu próprio designer gráfico e sua própria notação de diagrama, e use essa linguagem para gerar o código-fonte apropriado para cada projeto.

Desenvolvimento Específico de Domínio

O desenvolvimento específico do domínio é o processo de identificar as partes de seus aplicativos que podem ser modeladas usando uma linguagem específica do domínio e, em seguida, construir o idioma e implantá-lo para os desenvolvedores de aplicativos. Os desenvolvedores usam a linguagem específica do domínio para construir modelos específicos para seus aplicativos, usar os modelos para gerar código-fonte e, em seguida, usar o código-fonte para desenvolver os aplicativos.

Aspectos do desenvolvimento gráfico específico para domínio

Uma linguagem específica do domínio gráfico deve incluir os seguintes recursos:

  • Notação

  • Modelo de domínio

  • Geração de artefatos

  • Serialização

  • Integração com o Visual Studio

Notação

Uma linguagem específica do domínio deve ter um conjunto razoavelmente pequeno de elementos que podem ser facilmente definidos e estendidos para representar constructos específicos do domínio. Uma notação consiste em formas, que representam os elementos e conectores, que representam as relações entre elementos, em uma superfície de diagrama gráfico. Em Ferramentas de Linguagem de Domínio Específico, as formas podem ser estendidas e refinadas para representar os elementos da linguagem de domínio específico.

Modelo de Domínio

Uma linguagem específica do domínio deve combinar o conjunto de elementos e as relações entre eles em uma gramática coerente. Ele também deve definir se as combinações de elementos e relações são válidas. Por exemplo, as linguagens de programação normalmente impedem a herança circular, na qual uma classe é derivada de uma segunda classe e a segunda classe é derivada da primeira classe. Restrições também podem ser usadas para expressar lógica de negócios, por exemplo, uma pessoa não pode ser dependente de si mesma. Ferramentas de Linguagem Específicas para Domínio usa restrições para expressar as limitações que a maioria dos idiomas de domínio específico exige.

Geração de artefatos

Uma das principais finalidades de uma linguagem específica do domínio é gerar um artefato, por exemplo, código-fonte, um arquivo XML ou alguns outros dados utilizáveis. Normalmente, uma alteração no modelo significa uma alteração no artefato. Você pode usar Ferramentas de Linguagem Específica de Domínio para gerar artefatos e para regenerá-los quando alterar o modelo.

Serialização

Um idioma específico do domínio deve ser mantido em algum formato que possa ser editado, salvo, fechado e recarregado. Ferramentas de Linguagem Específica para Domínio usa um formato XML que permite definir e personalizar como a linguagem específica de domínio é serializada ou persistida.

Integração com o Visual Studio

Como as Ferramentas de Linguagem Específica de Domínio estão hospedadas no Visual Studio, elas estendem muitas janelas e controles do Visual Studio. Ele também permite personalizar o comportamento de comandos de menu, itens de caixa de ferramentas e outros elementos da interface do usuário.

Você também pode criar um Adaptador de Barramento de Modelo para sua linguagem específica do domínio. Esse adaptador permite referenciar um modelo e elementos em um modelo e permite que você escreva um código que possa acessar e atualizar uma instância do DSL. Usando o poderoso mecanismo do Model Bus, você pode escrever extensões do Visual Studio que são compatíveis com vários modelos. Você também pode escrever aplicativos autônomos que funcionam com modelos. Para obter mais informações, consulte Integração de modelos usando o Visual Studio Modelbus.

Benefícios do desenvolvimento específico de domínio

Um idioma específico do domínio pode fornecer os seguintes benefícios:

  • Contém construções que se ajustam exatamente ao espaço problemático.

    Ao contrário das linguagens de uso geral, uma linguagem específica do domínio consiste em elementos e relações que representam diretamente a lógica do espaço do problema. Por exemplo, um formulário de apólice de seguro deve incluir elementos para apólices e sinistros. Uma linguagem específica do domínio facilita o design do aplicativo e a localização e a correção de erros de lógica.

  • Permite que não desenvolvedores e pessoas que não conhecem o domínio entendam o design geral.

    Usando uma linguagem específica do domínio gráfico, você pode criar uma representação visual do domínio para que os não desenvolvedores possam entender facilmente o design do aplicativo.

  • Facilita a criação de um protótipo do aplicativo final.

    Os desenvolvedores podem usar o código que seu modelo gera para criar um aplicativo protótipo que eles podem mostrar aos clientes.

O processo de desenvolvimento de Domain-Specific

A maioria das equipes de desenvolvimento de software que usam linguagens específicas do domínio seguem estas etapas para criar e usar seus modelos:

  • A equipe distingue as partes variáveis do domínio das partes que nunca mudam.

  • Os desenvolvedores gravam código para as partes fixas e deixam pontos de extensão para as partes variáveis.

  • O desenvolvedor de software líder ou o arquiteto cria uma linguagem específica do domínio que incorpora os padrões de design das partes fixas do domínio e os pontos de extensão para as partes variáveis.

  • O desenvolvedor de software líder ou o arquiteto implanta a linguagem específica do domínio para os desenvolvedores dos vários aplicativos que a equipe produz.

  • Cada desenvolvedor cria um modelo que se aplica ao aplicativo específico.