Visão geral de extensibilidade para refatoração de banco de dados
Você pode estender os recursos do a refatoração de banco de dados para fornecer novos tipos de refatoração ou para novos tipos de arquivo Refatorar. Você pode implementar os dois tipos de extensibilidade para refatoração de banco de dados, criando as extensões de recurso. Antes de criar extensões de recurso para refatoração de banco de dados, você deve entender como os componentes de refatoração de banco de dados interagem e onde você pode estender esses componentes.
Para habilitar a refatoração de banco de dados operar em novos destinos, você pode criar os colaboradores de refatoração personalizados por herança da RefactoringContributor abstrata classe de base. Por exemplo, você pode oferecer suporte a refatoração em arquivos de texto ou XML que estão contidos no projeto de banco de dados.
Para habilitar novos tipos de refatoração não estão incluídos no Visual Studio Premium ou Visual Studio Ultimate, você pode criar operações de refatoração personalizadas por herança da RefactoringOperation abstrata classe de base. Por exemplo, você pode implementar um novo tipo de refatoração para substituir condicionais aninhados com cláusulas de protetor em uma série de separada IF instruções.
Refatoração e colaboradores de refatoração de banco de dados
O diagrama a seguir ilustra como a refatoração de banco de dados usa componentes conhecidos como colaboradores de refatoração para lidar com tipos específicos de refatoração.
Visão geral de extensibilidade para refatoração de banco de dados
Quando você aplica um banco de dados de refatoração operação pela primeira vez em sua sessão atual do Visual Studio, o recurso de refatoração é carregado junto com todos os refatoração tipos e colaboradores. O comando que você especificou é passado para o recurso de refatoração e o tipo especificado de refatoração é iniciado. O Gerenciador de Colaborador refatoração loop em cada colaborador que está registrado para o tipo especificado de refatoração. Cada tipo de Colaborador se aplica a um objeto diferente ou um conjunto de objetos e cada tipo pode ter um fluxo de dados diferentes.
Quando você implementa um novo tipo de refatoração, você deve criar os colaboradores que são necessários para oferecer suporte a esse tipo de operação de refatoração. Por exemplo, convém criar um novo tipo de refatoração substitui condicionais aninhados com protetor de cláusulas. Desde que esse tipo de refatoração alteraria somente os corpos dos procedimentos ou funções e não seria alterado os nomes de qualquer os objetos de banco de dados, você só precisará criar um colaborador de objeto de esquema e Colaborador do script.
Colaboradores do objeto de esquema
O diagrama a seguir mostra o fluxo de dados para um colaborador de refatoração que lida com objetos de esquema do banco de dados.
Fluxo de dados para um colaborador de objeto de esquema
Um colaborador de objeto de esquema atualiza a definição de um objeto de esquema. O colaborador atualiza a cópia no armazenamento de gravação no modelo de esquema de dados. O elemento de modelo atualizado é passado para o O modelo de objeto de domínio do Script Builder do (Script DOM) e é usado para gerar um DOM de Script atualizado. O DOM atualizada do Script é comparado com o DOM do Script da definição do objeto original pelo mecanismo de comparação de DOM de Script e um script atualizado é gerado.
Colaboradores de referência
O diagrama a seguir mostra o fluxo de dados para um colaborador de referência que manipula as referências entre objetos.
Fluxo de dados para um colaborador de referência
Um colaborador de referência recupera todas as referências e os deslocamentos do modelo de dados de esquema e as referências de cópia no armazenamento de gravação do modelo de esquema de dados de atualizações. O DOM atualizada do Script é comparado com o DOM do Script original e os resultados são usados para atualizar os scripts que contêm as referências que foram alteradas.
Planos de geração de dados e teste de unidade de banco de dados de colaboradores
O diagrama a seguir mostra o fluxo de dados de planos de geração de dados e teste de unidade de banco de dados colaboradores.
Fluxo de dados para os planos de geração de dados e teste de unidade de banco de dados de colaboradores
Um colaborador para planos de geração de dados usa XPathNavigator para localizar e atualizar as alterações no plano de geração de dados, é um arquivo XML.
Um colaborador para testes de unidade de banco de dados analisa o arquivo. resx para o teste de unidade de banco de dados e extrai as seqüências de caracteres de script são armazenadas no arquivo. Essas cadeias de caracteres de script, em seguida, são processadas usando o mesmo fluxo de dados como um colaborador do script de banco de dados.
Colaboradores do Script de banco de dados
O diagrama a seguir mostra o fluxo de dados para um colaborador do script de banco de dados.
Fluxo de dados para um colaborador do Script de banco de dados
Trata de um colaborador do script de banco de dados de atualizações para scripts de pré-implantação e scripts pós-implantação, outros scripts. SQL e seqüências de caracteres de script SQL extraídos dos testes de unidade de banco de dados. O construtor de modelo leva o script e cria um modelo-lo no armazenamento temporário do modelo de esquema de dados. Armazenamento temporário é usado para criar um modelo de Script DOM modificado. Esse modelo modificado é comparado com o modelo do script original e as diferenças são usadas para gerar o script atualizado final.
Colaboradores personalizados
Você pode criar seus próprios colaboradores personalizados para dar suporte aos destinos de refatoração adicionais que não foram descritos anteriormente neste tópico. Por exemplo, você pode criar um colaborador personalizado para a atualização de arquivos de texto, a documentação do banco de dados ou a saída das ferramentas de terceiros. Você deve determinar o fluxo de dados correto é necessário para suportar o destino de refatoração. Você deve fazer referência os tipos descritos anteriormente neste tópico se o novo tipo de destino se parece com os tipos de destino de um colaborador existente.
Tipos de refatoração de banco de dados
Você pode habilitar novos tipos de refatoração, criando um novo tipo de refatoração. Você pode criar novos tipos de refatoração implementando pelo menos quatro classes que herdam as seguintes classes base:
RefactoringCommand
Você registrar essa classe para fornecer um novo tipo de refatoração. A classe especifica quais elementos de modelo, o comando deve estar disponível e, em seguida, ele chama a operação de refatoração quando o usuário clica no comando.RefactoringOperation
Essa classe especifica como a operação de refatoração interage com a janela de visualização, especifica as propriedades que descrevem a operação e cria o ContributorInput.ContributorInput
Essa classe armazena os dados de entrada para o RefactoringContributor. Se o seu principal colaborador precisa secundários colaboradores para concluir a operação de refatoração, talvez você precise criar várias classes derivadas de ContributorInput. Por exemplo, se você estiver alterando o nome de um objeto, você não só tem que modificar o próprio objeto, mas você também deve modificar todas as referências a esse objeto. Portanto, você criaria um ContributorInput para o símbolo e outra para todas as referências para o símbolo.RefactoringContributor
Essa classe cria uma lista de propostas de alteração, com base na entrada especificada. Como com ContributorInput, talvez você precise criar várias classes derivadas de RefactoringContributor. Se você precisar de um ContributorInput secundário, seu principal RefactoringContributor cria essa entrada. Você deve declarar o provedores do esquema de banco de dados com que seus colaboradores a refatoração são compatíveis. Você também deve registrar todos os fatores que contribuem para um tipo de refatoração e o comando de refatoração.
Destinos de refatoração de banco de dados
Você pode estender um tipo registrado de refatoração para operar em um novo destino, como, por exemplo, um novo tipo de elemento de modelo ou um novo arquivo. Para habilitar a refatoração operar em um novo destino, você deve criar novos colaboradores refatoração. O colaborador novo deve ser capaz de operar em um do ContributorInputs definido para esse tipo de refatoração. Você criar um novo destino de refatoração ou colaborador implementando pelo menos uma classe que herda da classe base a seguir:
- RefactoringContributor
Essa classe cria uma lista de propostas de alteração, com base na entrada especificada. Você deve declarar o banco de dados de provedores de esquema com a qual os colaboradores de refatoração são compatíveis e você deve registrar todos os fatores que contribuem para um tipo de refatoração.