Diálogo Você pode usar diagramas de camada para projetar a arquitetura do aplicativo e verificar se o código está alinhado ...

Diálogo
Você pode usar diagramas de camada para projetar a arquitetura do aplicativo e verificar se o código está alinhado com o design. Você pode controlar o trabalho associado aos seus modelos vinculando itens de trabalho do Team Foundation Server com elementos de modelo. Isso fornece rastreabilidade entre os modelos, o IDE e o código, quer você esteja projetando uma nova solução ou atualizando uma solução existente. 

Vamos começar examinando a arquitetura de um aplicativo revisando seu diagrama de camada. 

O arquiteto da equipe sugeriu refatorar parte desse aplicativo para que ele se alinhe com o design no diagrama da camada. Essa tarefa está em nossa lista de pendências e está vinculada ao diagrama de camada.



Ação
No Gerenciador de Soluções, em Meu Trabalho, clique duas vezes no item de trabalho da tarefa para abri-lo. 

No item de trabalho, clique em Outros Links.

Em Link do Modelo, clique duas vezes no "link do modelo", que abre o Petshop.layerdiagram no projeto PetShopModels.

Diálogo
Um diagrama de camada mostra as dependências permitidas entre namespaces, que são mapeadas para camadas. Os diagramas de camada são muito semelhantes ao desenho em um quadro de comunicações. Eles têm formas e relações entre essas formas. Com a existência de diagramas de camada na sua solução, você pode fazer mais do que apenas descrever a arquitetura pretendida. Você pode validar seu código em relação a um diagrama de camada para descobrir se existem dependências inválidas. Ao incluir essa etapa como parte de seu processo de check-in e compilação, você pode descobrir mais facilmente as alterações no código que estão em conflito com o design.



Ação
No menu Arquitetura, escolha Janelas, Gerenciador de Camadas.

No diagrama de camada, clique na camada Business. Examine os artefatos no Gerenciador de Camadas.

No diagrama de camada, clique com o botão direito do mouse na camada Business. Escolha Validar Arquitetura. (isso poderá demorar um pouco)

Na janela Lista de Erros, examine os erros (cada um marcado por um X vermelho). Clique duas vezes no primeiro erro para visualizar o código que produziu esse erro.

Diálogo
Encontramos algumas dependências no código que estão em conflito com o design. O método Insert na classe Order torna inválidas as chamadas para métodos de duas outras classes. No diagrama de camada, o método Insert é mapeado para a camada Business, que não deveria se comunicar diretamente com as camadas para as outras duas classes. A camada Business deve se comunicar com a camada PaymentGateway.

A validação de camada nos mostrou o que está errado com o código, portanto, quando corrigimos esse conflito, a revalidação desse diagrama deverá confirmar que fizemos o certo.



Ação
No diagrama de camada, clique na camada PaymentGateway.

Na janela Gerenciador de Camadas, consulte o namespace PaymentGatway.

No Gerenciador de Soluções, expanda o projeto PaymentGateway, o tipo PaymentProcessor e revise os métodos membros.

Abra o arquivo PaymentProcessor.cs para visualizar as definições de métodos membros.

Diálogo
Examinando o código que foi mapeado para a camada PaymentGateway, podemos delegar parte da funcionalidade do método Insert para o método ProcessPayment. Vamos criar diagramas de sequência para que possamos comparar visualmente as estruturas de alto nível e chamar sequências para esses dois métodos.



Ação
Clique duas vezes no primeiro erro para exibir o código. Visualizamos a definição do método Insert.

Clique com o botão direito do mouse em qualquer lugar dentro da definição do método Insert. Escolha Gerar Diagrama de Sequência. Mantenha todas as opções propostas. Clique em OK.

O diagrama de sequência mostra o método Insert das classes CreditCardService e OnlinePaymentService.

No arquivo PaymentProcessor.cs, clique com o botão direito do mouse dentro da definição do método ProcessPayment. Escolha Gerar Diagrama de Sequência. Mantenha todas as opções propostas. Clique em OK.

Navegue entre os diagramas de sequência e compare quais classes são buscadas pelos métodos Insert e ProcessPayment e quais não são. Mostre as similaridades e as diferenças.

Diálogo
Observamos que esses dois métodos são muito semelhantes, porém com algumas diferenças. Vamos refatorar o método Insert para chamar ProcessPayment. Em seguida, executaremos a validação novamente para assegurar que nossas alterações resolveram os conflitos de dependência. 



Ação
Na definição do método Insert, substitua o código entre as seguintes instruções:

if (order.CreditCard.CardType == "CreditCardProviderA" || order.CreditCard.CardType == "CreditCardProviderB") 

and:

CalculatePaymentInfo(order);

pelo seguinte código:

PaymentGateway.PaymentProcessor processor = new PaymentGateway.PaymentProcessor();
if (!processor.ProcessPayment(order))
{
          return OrderStatus.Failed;
}


Valide a arquitetura.




Diálogo

Neste vídeo, mostramos como os diagramas de camada o ajudam a descrever a arquitetura pretendida de um aplicativo e como você pode usar a validação de camada para verificar onde seu código apresenta conflito com o design. Também mostramos como usar diagramas de sequência para visualizar o fluxo de método nas diferentes classes. Para saber como usar modelos UML para descrever sua arquitetura, veja nosso vídeo relacionado.