Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Sua Definição de DSL é uma plataforma na qual você pode criar um conjunto poderoso de ferramentas baseadas em uma linguagem específica do domínio. Muitas extensões e adaptações podem ser feitas substituindo e estendendo as classes geradas a partir da Definição de DSL. Essas classes incluem não apenas as classes de domínio definidas explicitamente no diagrama de Definição de DSL, mas também outras classes que definem a caixa de ferramentas, o explorer, a serialização e assim por diante.
Mecanismos de extensibilidade
Vários mecanismos são fornecidos para permitir que você estenda o código gerado.
Substituir métodos em uma classe parcial
Definições parciais de classe permitem que uma classe seja definida em mais de um lugar. Isso permite que você separe o código gerado do código que você mesmo escreve. Em seu código escrito manualmente, você pode sobrescrever classes herdadas do código gerado.
Por exemplo, se na definição de DSL você definir uma classe de domínio chamada Book, você poderá escrever um código personalizado que adiciona métodos de substituição:
public partial class Book
{
protected override void OnDeleting()
{
MessageBox.Show("Deleting book " + this.Title);
base.OnDeleting();
}
}
Observação
Para substituir métodos em uma classe gerada, sempre escreva seu código em um arquivo separado dos arquivos gerados. Normalmente, o arquivo está contido em uma pasta chamada CustomCode. Se você fizer alterações no código gerado, elas serão perdidas quando você regenerar o código da Definição de DSL.
Para descobrir quais métodos você pode substituir, digite a substituição na classe, seguida por um espaço. A dica de ferramenta do IntelliSense informará quais métodos podem ser substituídos.
Classes Double-Derived
A maioria dos métodos em classes geradas é herdada de um conjunto fixo de classes nos namespaces de modelagem. No entanto, alguns métodos são definidos no código gerado. Normalmente, isso significa que você não pode substituí-los; não é possível substituir em uma classe parcial os métodos definidos em outra definição parcial da mesma classe.
No entanto, você pode substituir esses métodos definindo o sinalizador Gera Duplo Derivado para a classe de domínio. Isso faz com que duas classes sejam geradas, uma sendo uma classe base abstrata da outra. Todas as definições de método e propriedade estão na classe base e somente o construtor está na classe derivada.
Por exemplo, no exemplo Library.dsl, a CirculationBook classe de domínio tem a Generates``Double Derived propriedade definida como true. O código gerado para essa classe de domínio contém duas classes:
CirculationBookBase, que é um resumo e que contém todos os métodos e propriedades.CirculationBook, que é derivado deCirculationBookBase. Ele está vazio, exceto por seus construtores.
Para substituir qualquer método, crie uma definição parcial da classe derivada, como CirculationBook. Você pode substituir os métodos gerados e os métodos herdados da estrutura de modelagem.
Você pode usar esse método com todos os tipos de elemento, incluindo elementos de modelo, relações, formas, diagramas e conectores. Você também pode substituir métodos de outras classes geradas. Algumas classes geradas, como o ToolboxHelper, sempre são derivadas duas vezes.
Construtores personalizados
Você não pode sobrescrever um construtor. Mesmo em classes que são derivadas duas vezes, o construtor deve estar na classe derivada.
Se você quiser fornecer seu próprio construtor, poderá fazer isso definindo Has Custom Constructor a classe de domínio na Definição de DSL. Quando você clicar em Transformar Todos os Modelos, o código gerado não incluirá um construtor para essa classe. Ele incluirá uma chamada para um construtor que está ausente. Isso causa um relatório de erros quando você cria a solução. Clique duas vezes no relatório de erros para ver um comentário no código gerado que explica o que você deve fornecer.
Escreva uma definição de classe parcial em um arquivo separado dos arquivos gerados e forneça o construtor.
Pontos de extensão sinalizados
Um ponto de extensão sinalizado é um lugar na Definição de DSL em que você pode definir uma propriedade ou uma caixa de seleção para indicar que você fornecerá um método personalizado. Construtores personalizados são um exemplo. Outros exemplos incluem definir a Kind propriedade de um domínio como Armazenamento Calculado ou Personalizado ou definir o sinalizador Is Custom em um construtor de conexões.
Em cada caso, quando você definir o sinalizador e regenerar o código, resultará um erro de compilação. Clique duas vezes no erro para ver um comentário que explique o que você precisa fornecer.
Regras
O gerenciador de transações permite definir regras que são executadas antes do final de uma transação na qual ocorreu um evento designado, como uma alteração em uma propriedade. Normalmente, as regras são usadas para manter a sincronização entre diferentes elementos na loja. Por exemplo, as regras são usadas para garantir que o diagrama exiba o estado atual do modelo.
As regras são definidas por classe, para que você não precise ter um código que registre a regra para cada objeto. Para obter mais informações, consulte Regras propagar alterações dentro do modelo.
Eventos da Loja
O repositório de modelagem fornece um mecanismo de evento que você pode usar para escutar tipos específicos de alteração no repositório, incluindo adição e exclusão de elementos, alterações nos valores da propriedade e assim por diante. Os manipuladores de eventos são chamados após o fechamento da transação na qual as alterações foram feitas. Normalmente, esses eventos são usados para atualizar recursos fora da loja.
Eventos do .NET
Você pode inscrever-se em alguns eventos em objetos. Por exemplo, você pode escutar cliques de mouse em uma forma. Você precisa escrever um código que assine o evento para cada objeto. Esse código pode ser escrito em uma substituição de InitializeInstanceResources().
Alguns eventos são gerados em ShapeFields, que são usados para desenhar decoradores em uma forma. Para obter um exemplo, consulte Como interceptar um clique em uma forma ou decorador.
Esses eventos geralmente não ocorrem dentro de uma transação. Você deve criar uma transação se quiser fazer alterações na loja.