Arquitetura de Referência Microsoft: Domain Driven Design, Dependency Injection, Cloud e muito mais (Parte 2)

Olá pessoal!

Neste post daremos continuidade ao post anterior, onde começamos a traçar um apanhado geral sobre o e-book gratuito .NET Technology Guide for Business Applications, escrito por Cesar de La Torre e David Carmona.

 .NET Technology Guide for Business Applications

No post anterior fomos até o quadro Collaboration and Portals da camada Application Services, representada no diagrama ao lado. Neste daremos continuidade a partir de Custom application platform, indo até Business products and platforms, finalizando assim completamente a camada Application Services.

Iniciando então em Custom application platform, encontramos as tecnologias que possibilitam a criação de componentes de negócios customizados de acordo com o domínio da aplicação em questão.

Dentro de Custom application platform, começando pelo quadro Custom components, temos as tradicionais bibliotecas Class Library, utilizadas geralmente para encapsular e centralizar regras de negócios ou ainda para prover componentes de interface reutilizáveis. Entity Models referem-se aos modelos de entidades que deverão refletir os domínios de negócio tratados pela aplicação ou módulo, permitindo que estes sejam persistidos através de uma das tecnologias listadas dentro da caixa Storage, que será abordada no próximo post desta série. As tecnologias relacionadas no e-book para endereçar tais modelos são o Entity Framework, o Link e o ADO .Net.

É importante enfatizar que as tecnologias compreendidas em Custom Components e Entity Models suportam a implementação de uma arquitetura aderente aos conceitos de Domain Driven Design. No e-book há um capítulo específico falando sobre esta abordagem de desenvolvimento, com uma forte recomendação para sua adoção em aplicações de missão crítica ou core-business, ou ainda que sejam alteradas com freqüência, dada a alta manutenibilidade e a orientação ao domínio de negócio que este modelo proporciona.

Ainda no contexto de aplicações de missão crítica, core-business, ou que sejam alteradas com freqüência, o e-book sugere a adoção do principio da Inversão de Dependência, que é um dos princípios SOLID, através das abordagens de Inversão de Controle (Inversion of Control – IoC) e Injeção de Dependência (Dependency Injection – DI), sendo estas suportadas pela Microsoft por frameworks como o MEF (Managed Extensibility Framework), disponível no .NET Framework desde a versão 4.0 e o Unity, disponível na Enterprise Library. Ambos endereçam muito bem requisitos de manutenibilidade e extensibilidade, através da redução do nível de acoplamento entre objetos, passando de uma abordagem de instanciação hard-coded para uma baseada em configuração/declaração e orientação a interfaces. O que diferencia o MEF do Unity, entretanto, é que o MEF vai além do conceito de Injeção de Dependência, permitindo a criação de aplicações extensíveis através de um mecanismo que pode ser associado ao conceito de plug-ins, de forma declarativa – ou seja, sem que haja necessidade de se criar arquivos de configurações. Veja aqui um comparativo bastante interessante sobre estas tecnologias, publicado na Visual Studio Magazine. Além de manutenibilidade, a inversão de dependência também endereça muito bem requisitos não funcionais de testabilidade, uma vez que os artefatos (classes e componentes, por exemplo) desenvolvidos sob este conceito podem ser desenvolvidos e testados de forma independente, através de técnicas e frameworks de teste unitário.

Para endereçar requisitos não funcionais como performance e escalabilidade, a caixa Cache compreende tecnologias que implementam mecanismos de Cache em duas categorias. Uma delas é o Cache Distribuído em Memória, endereçado pela Microsoft pelo Windows Server AppFabric Cache, já abordado em posts anteriores neste blog, e pelo Windows Azure Cache, tecnologia esta correspondente ao AppFabric Cache, porém, voltada à nuvem . Como você pode conferir em detalhes neste artigo, um cache distribuído em memória permite que informações sejam recuperadas rapidamente a partir da memória de em um ou mais nodes, em uma infraestrutura de alta disponibilidade. Já a outra categoria é o CDN (Content Delivery Network), onde conteúdos de sites web, como vídeos, textos e imagens, são armazenados em memória para acesso rápido. CDNs normalmente compõem um conjunto de servidores distribuídos em um ou mais data centers, de forma a conferir alta performance e alta disponibilidade a sites que tenham tais atributos de qualidade como requisito. A tecnologia da Microsoft correspondente a este categoria é o Windows Azure CDN.

Partindo para a caixa Security, encontramos no e-book o conceito de autorização (Authorization) sendo endereçado pelo framework WIF (Windows Identity Foundation), que agora é distribuído como parte integrante do .NET Framework 4.5. O WIF provê um conjunto de APIs, templates, componentes e ferramentas que permitem a criação de aplicações denominadas “claims-aware”, ou seja, que se utilizam da autenticação “claims-based”. Os produtos de infraestrutura relacionados serão discutidos mais adiante, quando abordarmos a camada de infraestrutura.

Dentro de mensageria, identificado no diagrama como Messaging, são relacionados os padrões de enfileiramento de mensagens (Message Queue) e barramento de serviços (Service Bus), endereçados pelas ferramentas MSMQ (Microsoft Message Queue), Microsoft Service Bus, Biztalk Server/Services, Windows Azure Queues e Windows Azure Service Bus, sendo os dois últimos voltados a aplicações que tenham a nuvem Microsoft como destino de publicação. Estruturas de enfileiramento de mensagens são indicadas para comunicações assíncronas entre aplicações ou processos distintos. No e-book há uma sugestão para utilização de mensageria para a comunicação de subsistemas (ou bounded contexts no conceito de DDD) distintos. Barramentos de serviços, por sua vez, permitem a criação de aplicações seguindo arquitetura baseada em eventos (veja Event-Driven Architecture 1 de 2 e Event-Driven Architecture 2 de 2), aplicações que utilizam o padrão de integração “publish/subscribe” (veja Event-Driven Architecture 2 de 2), soluções que seguem conceitos de Arquitetura Orientada a Serviços (SOA – Service Oriented Architecture) ou ainda para cenários em que se queira integrar aplicações da nuvem com aplicações on-premisses. Para mais detalhes, veja ainda neste post as principais funções de um ESB.

Por fim, a caixa Business Products and Platforms compreende produtos Microsoft que endereçam necessidades de negócios especificas, como gestão de relacionamento com clientes e gestão empresarial (CRM – Customer Relationship Management / ERP – Enterprise Resource Planning, respectivamente) atendidas pelos produtos da família Dynamics. Estes são apenas citados no e-book como soluções que podem ser integradas às demais tecnologias Microsoft relacionadas nele, como portais SharePoint, serviços e mensageria, por exemplo.

Veja na figura a seguir (retirada do e-book), uma representação gráfica do mapeamento de padrões / conceitos para as respectivas tecnologias Microsoft, vistos até aqui desde o primeiro post.

 .NET Technology Guide for Business Applications

As caixas em verde, ou “azul petróleo” (segundo a paleta de cores Microsoft), serão descritas no post seguinte, onde abordaremos toda a camada de infraestrutura (Infrastructure Services) e Deployment Environment, finalizando esta série de posts. Até Lá!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*