Arquivo da categoria: Leitura Recomendada

Certificação TOGAF em 5 passos

Olá pessoal!TOGAF 9 Foundation

Recentemente passei na primeira prova de certificação do TOGAF versão 9.1: TOGAF 9.1 Foundation. Neste post vou descrever os passos que segui para fazer a prova com bastante confiança – afinal, uma reprovação implicaria em um prejuízo considerável (cerca de US$ 210,00 pagos pela prova feita através da Prometric).

É fato que cada um tem sua própria forma de aprendizado e que algumas coisas que funcionaram para mim podem não funcionar para todos. A sugestão é que você adapte estas dicas para a forma que melhor lhe atenda. Dependendo do seu nível de conhecimento atual sobre o assunto, você poderá considerar passos adicionais aos que estou listando abaixo, ou então a eliminação de alguns deles. Vamos lá!

Continue lendo

Porque projetos de TI demandam tanto esforço, energia, custam caro e ainda por cima atrasam?

Você já deve ter se deparado com esta questão em algum momento da sua carreira, ou quem sabe nunca deixou de se deparar com ela. É claro que são diversas as possíveis causas para ineficiência em TI e este post não tem a pretensão de abordar todas elas. Ao invés, vamos abordar uma das principais causas, tratada anteriormente por autores como Martin Fowler e Uncle Bob: Technical Debit ou Dívida Técnica (tradução mais fiel, em minha opinião). Além de materiais escritos pelos tais autores, encontrei também excelentes posts a respeito no site da InfoQ, no blog do Adriano Tavares e, claro, na Wikipedia.

DefiniçãoDevo, não nego. Pagarei quando puder.

A dívida técnica é como um financiamento, ou uma aquisição de dívida qualquer em que há o pagamento pelo empréstimo do dinheiro (juros). Na maioria dos casos, a aquisição de uma dívida acontece quando o indivíduo ou organização opta por ter um benefício imediato, ao invés de poupar dinheiro para comprar sem precisar recorrer a um financiamento. Isso pode ser feito por necessidade, ou simplesmente por ser mais cômodo. Normalmente tal indivíduo ou organização tem ciência de que ao fazer isso pagará um valor maior pelo que está adquirindo e também sabe que poderá liquidar sua dívida no futuro, caso se planeje para isso.

Continue lendo

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

Olá pessoal!

Esta é o último post de uma série em que vimos até então um apanhado geral sobre o e-book gratuito .NET Technology Guide for Business Applications, escrito por Cesar de La Torre e David Carmona. No post anterior terminamos de abordar toda a camada Application services. Neste, passaremos pelas camadas Infrastructure services e Deployment environment, ilustradas no diagrama a seguir. Vamos lá!.NET Technology Guide for Business Applications

Continue lendo

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

imageOlá pessoal!

Neste post e nos seguintes veremos um apanhado geral sobre o e-book gratuito .NET Technology Guide for Business Applications , escrito por Cesar de La Torre e David Carmona. Como seu próprio nome já anuncia, nele é apresentado um guia de tecnologias .Net para a criação de aplicações de negócios. O seu conteúdo discorre basicamente sobre o diagrama abaixo, onde a pilha mais atual de tecnologias para desenvolvimento e infraestrutura Microsoft é apresentada.

Continue lendo

Enterprise Integration Patterns

Olá pessoal!

Muito dificilmente você ainda não ouviu falar do livro Enterprise Integration Patterns, de Gregor Hohpe e Bobby Woolf, com prefácio e contribuição de Martin Fowler. Trata-se de excelente livro sobre integrações, mais especificamente sobre padrões de integrações corporativas, como o próprio título enuncia. O livro aborda padrões de integração amplamente vistos no mercado e explica porque a Mensageria (Messaging) é, dentre eles, o que melhor endereça diversos aspectos que devem ser levados em consideração ao estabelecer integrações confiáveis. Os autores ainda consideram que apesar desta ser uma abordagem amplamente indicada, ela é igualmente pouco conhecido ou aprofundado pelo mercado, e é justamente essa a motivação para que a maior parte do livro discorra sobre os diversos padrões relacionados à mensageria, como por exemplo: Guaranteed Delivery, Message Broker, Message Bus, Publish Subscribe Channel, Request-Reply e diversos outros.

Continue lendo

Who gets to be a software architect

Dilbert - ArchitectOlá pessoal!

Neste post gostaria de compartilhar um resumo do conteúdo de um podcast que ouvi recentemente, cujo tema principal era justamente o título deste post: “Who gets to be a software architect”. Acredito que o assunto seja bastante relevante, pois tem sido tema de diversas discussões em diversas comunidades, demonstrando que ainda há pouca maturidade e falta de consenso no mercado.

O podcast foi disponibilizado pelo Oracle Technology Network, no canal ArchBeat, que trata de assuntos relacionados à arquitetura. Para quem ainda não conhece, vale a pena conferir. O canal aborda assuntos diversos relacionados à arquitetura, tecnologias e tendências, como SOA, Cloud Computing, Governança, Enterprise Architecture, Business Architecture, etc.

O podcast consistiu em uma panel discussion, composta por quatro participantes de peso, além do Bob Rhubart, host dos podcasts deste canal. São eles:

  • Ron Batra: Oracle ACE Director, Diretor de desenvolvimento de produtos cloud computing na AT&T;
  • Brian Huff: Oracle ACE Director, Chief Software Architect na Bezzotech, Inc.;
  • Randy Stafford: Membro do Oracle’s A-Team – um grupo de arquitetos que trabalham em um grupo de desenvolvimento Oracle Middleware;
  • Eric Stephens: Enterprise Architecture Director, na Oracle;

A seguir consta o link para mais detalhes do podcast, onde também pode ser baixado o áudio: https://blogs.oracle.com/archbeat/entry/show_notes_who_gets_to_be_a_so.

Separei o conteúdo da discussão em alguns temas, que podem ser conferidos a seguir. Procurei manter o conteúdo fiel ao que foi discutido no podcast, sem incluir opiniões pessoais e sem alterar o sentido ou opinião dos participantes.

O que separa o papel de um desenvolvedor do papel de um arquiteto

Arquitetos caminham na direção de uma liderança técnica, enquanto desenvolvedores estão mais focados em tarefas de codificação. Arquitetos produzem especificações técnicas, diagramas arquiteturais, mas não focam em bits e bytes o tempo todo. O arquiteto estrutura o que deve ser construído. Ao mesmo tempo, arquitetos devem saber programar seu design. Os melhores arquitetos iniciaram sua carreira como desenvolvedores e posteriormente assumiram novas responsabilidades gradualmente.

O fato de estar longe da codificação não exime do arquiteto a responsabilidade de se manter atualizado, contribuindo para o desenvolvimento, o que aumenta sua credibilidade perante o time.

Alguns soft skills diferenciam arquitetos de desenvolvedores. Arquitetos devem saber influenciar, devem ter visão, liderança, devem saber trabalhar com times diversos, comunicar decisões arquiteturais / design.

“The developers are the ones who build skyscrapers, while the architect is someone who designs the city, while enterprise architects are the city planners.“

Diferentes papeis dentro do tema “Arquitetura”

Alguns exemplos de diferentes papeis dentro do tema arquitetura foram citados, demonstrando que ao contrário do que comumente é entendido, não existe apenas o papel do Arquiteto de Aplicações / Sistemas:

  • Infrastructure Architects: focam em detalhes de arquitetura de infraestrutura. Cluster, load balancing, firewalls, virtualização, servidores, etc, são temas recorrentes no seu dia-a-dia;
  • Integration Architects: SOA, EAI e padrões relacionados são suas principais preocupações;
  • Enterprise Architects: Conhecem o mapa de projetos / sistemas / frentes de negócios da corporação, estabelecem roadmaps de tecnologia e lidam com aspectos técnicos e também não-técnicos da organização.
  • Application Architect: Trabalham no nível de projetos. Em geral estabelecem e comunicam visões arquiteturais, que compreendem decisões de design de um projeto.

O título de “Arquiteto” deve ser reservado para aqueles que possuem certificações?IASA Carrer Map

Em geral, certificações mais técnicas focam em um produto ou framework especifico. Neste sentido, um profissional certificado será um excelente profissional para implementação de uma solução e-business, ou para identificar um determinado problema em uma base de dados ou aplicação java. Tais habilidades são extremamente valiosas para desenvolvedores / implementadores de solução, que em geral, procuram certificações para se distinguirem ou se destacarem.

Existem também organizações e certificações voltadas para as diversas segmentações dentro de arquitetura (infrastructure, information, business) e também voltadas à arquitetura corporativa (Enterprise Architecture). O IASA – International Association for Software Architects é uma organização que provê um mapa de carreira com cursos voltados para arquitetos e certificações relacionadas – veja imagem ao lado. O SEI – Software Engineering Institute também provê excelentes materiais e cursos relacionados à arquitetura de software. A Oracle também possui uma certificação voltada a Enterprise Architecture, chamada Oracle Enterprise Architecture Designation, além do Open Group, com o TOGAF.

Para arquitetos, além da competência técnica, habilidades de comunicação são cruciais. Normalmente, um arquiteto deverá passar sua visão para CIO, CTO, CEO, fornecedores, desenvolvedores, etc. Neste sentido, uma certificação não garante que o arquiteto seja competente o suficiente para realizar seu trabalho, já que é muito difícil certificar habilidades comunicacionais. Em geral, o que é levado em consideração na contratação de um arquiteto são suas experiências anteriores bem-sucedidas.

“The person (arquiteto) should have the ability to transcend one technology to the concept.”

Excelentes desenvolvedores podem se tornar arquitetos?

Se você é um excelente vendedor, não significa que você se tornará um excelente gerente de vendas. O mesmo vale para desenvolvedores e arquitetos. Algumas pessoas possuem profundos conhecimentos em bancos de dados, conhecem todas os truques para que o banco de dados ou o java faça exatamtente o que querem, e a forma mais rápida para resolver um problema em um sistema existente. Outras pessoas se dão muito bem quando trabalham em cima de requisitos difusos ou não claros.

É uma questão de mudança de ferramentas. Enquanto que para o desenvolvedor a principal ferramenta de comunicação é o teclado, para o arquiteto sua principal ferramenta deve ser o quadro branco e apresentações power point. Alguns desenvolvedores não gostam de se expor e não há nada de errado nisso. O mais importante é estar fazendo aquilo que se sente bem.

A discussão encerrou com o tema “hot-button issues” (más práticas), comummente cometidas por arquitetos.

  • Decisões “make or buy” devem ser bem pensadas. Por vezes, arquitetos ou pessoas com tal responsabilidade (CIO) decidem por manter e investir em uma ferramenta desenvolvida “in-house”, enquanto que comprar um pacote de mercado e investir em sua implantação pode trazer uma melhor relação custo/beneficio a longo prazo.
  • Um arquiteto não deve optar por tecnologias apenas por possuir conhecimento prévio. O benefício maior para a organização deve ser levado em consideração;
  • Um arquiteto nunca deve misturar diversas visões em apenas um diagrama. É comum encontrar componentes de infraestrutura, fluxo de dados, aplicações, regras e camadas de negócios no mesmo diagrama. Diferentes áreas de conhecimento devem ser representadas em diferentes visões / diagramas.
  • Excelentes comunicadores que não sabem desenvolver seu design não necessariamente são bons arquitetos.
  • Utilizar tecnologias apenas porque todos estão usando, ou utilizar tecnologias recém-lançadas, cedendo ao apelo comercial, não necessariamente é a melhor solução. Arquitetos devem saber selecionar as tecnologias mais apropriadas para o problema em questão, e que melhor se adequem ao cenário da organização.

RDD – Responsibility Driven Design e GRASP – General Responsibility Assignment Software Principles (2 de 2)

Olá pessoal!

Neste artigo veremos os demais padrões GRASP não abordados no anterior. São eles:

Controller – Determina que deve haver uma classe ou camada responsável por receber e tratar eventos da camada de interface com o usuário, delegando as ações para as camadas inferiores, de forma que ela funcione como intermediadora. O padrão também diz que pode ser criada uma controller para cada caso de uso. Ou seja, as funcionalidades providas pela interface, que dizem respeito a determinados casos de uso são delegadas para as controllers correspondentes. O objetivo com a controller é desacoplar (veja Low Coupling) a camada de interface com o usuário – que deve focar em apresentação, estilos, design, etc. – da implementação em si, desta forma aumentando a coesão (veja High Coesion), já que cada camada atenderá apenas a responsabilidades específicas e bem definidas.

Diagrama de classes: Exemplo padrão GRASP Controller

 

Pure Fabrication – Determina que assuntos não diretamente relacionados ao domínio da aplicação devem ser tratados por classes apartadas, denominadas "invenção pura". Ou seja, aquilo que para o domínio da aplicação não faça sentido é considerado e apartado como uma "invenção". Um exemplo desta situação é o encapsulamento de funcionalidades e particularidades para acesso a um banco de dados (componentes que encapsulam o driver de acesso a banco de dados, como por exemplo, o ADO .NET), em classes específicas que possam ser reutilizadas dentre as demais classes que precisam da mesma funcionalidade. Classes utilitárias e diversas funcionalidades providas por frameworks em geral são consideradas invenções puras. Este padrão ajuda no aumento da coesão (veja High Coesion), uma vez que define que as classes de domínio não contenham funcionalidades que vão além das suas reais responsabilidades. Desta forma, o reuso também é favorecido, já que as invenções puras são extraídas do domínio, de forma que possam ser reutilizadas.

Polymorphism – O polimorfismo prega que operações polimórficas sejam utilizadas ao invés de decisões. Para ilustrar este conceito nada melhor que um exemplo. Considere uma classe Pessoa, com os atributos Nome, NumeroCpf, NumeroCnpj e Tipo (Fisica ou Juridica). Neste modelo, todas as classes que precisem obter o documento da pessoa muito provavelmente implementarão um IF com base no atributo Tipo e considerarão ou o NumeroCpf ou o NumeroCnpj como o documento. Segundo o padrão, criar uma operação polimórfica significa criar uma interface Pessoa com o atributo Nome e uma operação ObterDocumento e duas classes que implementam esta interface: PessoaFisica (NumeroCpf) e PessoaJuridica (NumeroCnpj). Cada classe fará sua própria implementação da operação ObterDocumentDiagrama de classes: Exemplo padrão GRASP Polymorphismo, de forma que os demais utilizadores não tenham mais que se preocupar com a regra para obtenção do documento com base no tipo da pessoa. Um benefício desta abordagem é que caso seja necessário adicionar um terceiro tipo de pessoa (PessoaEstrangeira), o impacto seria menor para as classes dependentes, já que a operação polimórfica é a mesma (ObterDocumento).

Indirection – Determina que o sistema não conheça e que não esteja acoplado (veja Low Coupling) às implementações reais e especificas de determinados assuntos. Projetar para indireção pode envolver a criação de camadas que encapsulam determinadas funcionalidades ou que desacoplem outras camadas. O padrão Controller é um exemplo de indireção, já que com ele a user interface não depende diretamente das camadas inferiores (model, por exemplo), e vice-versa. Existem diversas formas de se aplicar a indireção. Além do MVC, outro exemplo de aplicação deste conceito é a Injeção de Dependência, onde as implementações dependem de interfaces que são realizadas em objetos concretos apenas em tempo de execução. Diversos design-patterns também se beneficiam deste conceito, por exemplo: Abstract Factory, Facade, Adapter, Strategy, Proxy, etc. Um exemplo simples e recorrente de indireção é o que o Visual Studio faz quando adicionamos uma referência para um serviço em um projeto. Por traz dos panos são criadas classes Proxy que encapsulam toda a complexidade envolvida no processo de chamar um serviço através do protocolo utilizado (SOAP, p. ex.), serializar e deserializar objetos de transferência, tratar seu retorno, etc. Todo o restante do sistema que utiliza o objeto Proxy criado se quer sabe o que está por traz dele, de forma que se o protocolo de comunicação for alterado, por exemplo, nada será afetado além do Proxy.

Protected Variations – A variação protegida é uma forma de indireção. A diferença é que neste caso o principal objetivo é proteger o sistema ou uma classe de variações previstas ou que tenham grandes possibilidades de ocorrer. Um exemplo deste tipo de situação é quando utilizamos componentes ou serviços de terceiros1 ou mesmo quando precisamos integrar com APIs de pacotes de aplicações. Em todas estas situações a ideia é proteger seu sistema ou sua classe da possibilidade de alteração na interface do componente, do serviço ou da API. As mesmas abordagens e padrões utilizados para a indireção também se aplicam à variação protegida. Conceitos e padrões de EAI (Enterprise Application Integration) e SOA (Service Oriented Architecture) também apoiam a indireção e a variação protegida de uma forma mais ampla.

RDD – Responsibility Driven Design e GRASP – General Responsibility Assignment Software Principles (1 de 2)

158382_4Olá pessoal

Neste post vamos conhecer alguns conceitos de programação orientada a objetos (POO) que nos ajudam a pensar em como estruturar projetos orientados a objetos. Ambos os conceitos abordados neste post estão descritos no livro “Utilizando UML e Padrões – Uma introdução à Análise e ao Projeto Orientado a Objetos e ao Desenvolvimento Iterativo” de Craig Larman – Livro muito bom que trata em detalhes de diversos assuntos bastante pertinentes no nosso dia-a-dia: processos de desenvolvimento iterativos, incrementais e ágeis, papéis e responsabilidades, artefatos, UML, conceitos de programação orientada a objetos, RDD, padrões GRASP, design-patterns (GOF) e outros.

Vamos começar então pelo RDD. Segundo o livro, RDD é uma metáfora geral que nos leva a raciocinar sobre projetos de software orientados a objetos, sob o ponto de vista de responsabilidades. Por responsabilidades, entende-se o que nossas classes de objetos ou mesmo componentes de software devem fazer e saber. Em um modelo de classes o fazer é realizado por métodos e o saber por atributos. Outro conceito envolvido no RDD é o de colaboração. Uma vez definidas as responsabilidades, há de se definir como seus objetos colaboração para que o objetivo seja atingido.

Já o GRASP define nove padrões ou princípios voltados à atribuição de responsabilidades, que apoiam o RDD. Analisando estes conceitos e os padrões GRASP, que veremos em detalhe mais a frente, podemos concluir que ambos apenas endereçam questões básicas de orientação a objetos. E o objetivo é justamente esse. Tanto RDD quanto GRASP servem como uma ferramenta para apoiar no domínio de conceitos básicos de programação orientada a objetos. E quando falamos de conceitos básicos, logo veremos que diversos tópicos abordados fundamentam outros padrões mais específicos, como por exemplo, MVC e os design-patterns do GOF. Isso é interessante, porque para entender estes padrões mais específicos temos que ter os conceitos básicos bem fundamentados. Outro ponto importante é que alguns padrões não se restringe apenas ao mundo de orientação a objetos. Alguns conceitos empregados nos padrões High Coesion, High Coupling, Indirection e Protected Variation são altamente pertinentes e recorrentes em arquiitetura de software. Vamos então aos padrões GRASP.

Diagrama de classes - Composição NotaFiscal - Item

Creator – Este padrão determina quem é responsável por criar quem. Uma das possibilidades a considerar, por exemplo, é que uma classe A deve ser responsável por criar uma classe B caso a classe A tenha uma relação de composição com a classe B. Outra possibilidade citada por este padrão é que a classe A pode ser responsável por criar a classe B caso ela tenha consigo informações suficientes para a inicialização da classe B ou caso use B de maneira muito próxima. Considere, por exemplo, uma relação entre uma classe NotaFiscal e Item, que usualmente denota uma relação de composição. Ou seja, uma nota fiscal é composta por itens de forma que não faça sentido sua existência sem eles. Neste exemplo, a responsabilidade por criar instâncias da classe Item seria da classe NotaFiscal, que poderia fazê-lo através de uma operação “IncluirItem”.

Information Expert – Determina a qual classe deve ser atribuída a responsabilidade de prover uma nova funcionalidade. O padrão diz que a classe que possuir mais informações a respeito da funcionalidade em questão deve ser a responsável por provê-la. Considerando o exemplo anterior (NotaFiscal – Item), caso precisássemos saber a quantidade de itens de uma nota ou o valor total do itens quem deveria ser a classe responsável? A classe NotaFiscal é a classe que tem mais informações sobre seus Itens, já que ela é composta por Itens, logo, as operações ObterQuantidaDeItens e ObterValorTotal é uma responsabilidade da classe NotaFiscal. Note que tanto este quanto o padrão Creator são bem básicos e definem conceitos bastante triviais. O que é importante observar é que ambos definem regras gerais que estão por traz do que fazemos por “intuição” no dia-a-dia.

High Coesion – A alta coesão diz respeito à criação de classes que tratem de assuntos focados e bem definidos. Uma classe não coesa é aquela que trata de diversos assuntos distintos, tornando-se difícil de entender, manter, testar, evoluir e reutilizar. A alta coesão também suporta o baixo acoplamento (veja Low Coupling).

Low Coupling – O baixo acoplamento diz respeito à redução de dependência entre classes de forma que uma necessidade de mudança tenha menor impacto nos objetos dependentes. Projetar para baixo acoplamento envolve a utilização de conceitos de alta coesão (veja High Coesion), pois, classes mais coesas são menos dependentes entre si. Imagine, por exemplo, uma classe que contenha implementações de diversos assuntos diferentes – não coesa. Todos os demais módulos do sistema que dependam dos assuntos contidos nesta classe dependerão de uma mesma classe, de forma que alterações em qualquer um dos assuntos abordados proporcionem maior risco para todos os demais. Projetar para baixo acoplamento também envolve utilização de conceitos de encapsulamento. Encapsular significa esconder do mundo externo particularidades, implementações e informações que não digam respeito diretamente ao negócio / domínio, ou que sejam sujeitas a mudanças. Uma vez que tais informações sejam escondidas atrás de propriedades ou operações, por exemplo, as demais classes não serão afetadas quando houver alterações – ou seja, terão baixo acoplamento. O baixo acoplamento também pode ser atingido através de técnicas utilizadas para indireção (veja Indirection) e variação protegida (veja Protected Variation).

Por enquanto é só. No próximo artigo devo trazer os demais padrões GRASP: Controller, Pure Fabrication, Polymorphism, Indirection e Protected Variation. Até lá.

Arquitetos devem saber programar o seu design

97ThingsOlá pessoal!

No meu primeiro post neste blog eu falei sobre um capítulo do livro “97 Things Every Software Architect Should Know”. O capítulo tratava de um comportamento bastante comum e, no entanto, bastante repugnável, a arrogância. Neste post eu falo sobre três capítulos deste mesmo livro, porém, desta vez o tema é relacionado às habilidades de programação de um arquiteto.

O livro citado é composto por diversos capítulos curtos, onde cada um deles traz conselhos e experiências de diversos arquitetos renomados, de diversos lugares do mundo. A ideia geral do livro é que cada capítulo trate de um assunto distinto, formando assim um conjunto de coisas distintas que todos nós deveríamos saber. No entanto, notei que três capítulos deste livro tratam de um mesmo tema, denotando a sua importância. Veremos então a seguir a ideia geral dos três capítulos e também algumas passagens.

Architects Must Be Hands On – página 38 – John Davies

Neste capítulo, John Davies diz que um arquiteto deve ser capaz de preencher qualquer posição em um time, desde o cabeamento de rede, até a configuração do processo de compilação e a execução de testes unitários, por exemplo. Para enfatizar, ele ainda diz: “Without a good understanding of the full range of technology, an architect is little more than a project manager”. Ele diz ainda que os desenvolvedores devem ver um arquiteto como um líder, capaz de dar exemplos que possam ajuda-los a se desenvolver. Arquitetos que não possuam conhecimento sobre uma determinada tecnologia empregada em um projeto não podem esperar que os desenvolvedores tenham confiança nele.

Before Anything, an Architect Is a Developer – página 126 – Mike Brown

Neste capítulo Mike Brown faz uma associação entre a carreira de um arquiteto e outras carreiras de outras áreas, porém, que requerem o mesmo nível de senioridade. Ele diz, por exemplo, que nenhum juiz nunca foi um advogado e que nenhum chefe de cirurgia nunca foi um cirurgião. Ele diz ainda que as pessoas que ocupam estas posições devem continuar a se atualizar e a se desenvolver em suas respectivas áreas. Isso não é diferente para nós arquitetos. Outro ponto bastante interessante colocado pelo Mike é que o código de um arquiteto é a sua moeda, sendo esta a forma mais eficiente para ganhar a confiança dos desenvolvedores. E para finalizar, Mike ainda diz: “Part of knowing what is feasible in a solution is having knowledge of the effort involved in developing the elements of the solution".

If You Design It, You Should Be Able to Code It – página 150 – Mike Brown

Neste capítulo Mike Brown diz que é muito tentador para nós arquitetos criarmos designs bem elaborados e abstrações que endereçam os problemas de forma bastante elegante. Ele diz ainda que é ainda mais tentador experimentar novas tecnologias em um determinado projeto. Porém, Mike diz que temos que pensar que no dia-a-dia, quem implementará o que ele chama de acrobacias arquiteturais, são os desenvolvedores e que isso normalmente traz impacto para o projeto. Mike ainda aconselha:

“Don’t use a pattern in your design that you haven’t personally implemented before. Don’t rely on a framework that you haven’t coded against before. Don’t use a server that you haven’t configured before. If your architecture depends on design elements that you haven’t personally used, there are a number of negative side effects:

  • You will not have experienced the learning curve that your developers will have to face;
  • You will not know the pitfalls to avoid when using the elements;
  • You will lose the confidence of your developers;
  • You will introduce unecessary risk.”

Leitura recomendada: PerfTestGuide, Application Architecture Guide, ebookAS

Olá pessoal!

Por falar em arquitetura, neste post gostaria de registrar três e-books que devem fazer parte da biblioteca digital de todo arquiteto que trabalha com tecnologias Microsoft.   

  • Application Architecture Guide (v.2.0 – 2009): Com o próprio nome já sugere, trata-se de um guia de arquitetura criado pelo grupo Patterns e Practices e disponibilizado gratuitamente pela Microsoft. O e-book cobre três assuntos principais relacionados a arquitetura de software Microsoft e ainda conta com um apêndice. Os três assuntos são:
    • Software Architecture and Design: Resumo de princípios e padrões para fundamentação de uma boa arquitetura. Também provê uma abordagem para criação do seu próprio modelo de arquitetura.
    • Design Fundamentals: Um guia para definição de camadas, componentes e serviços. Também aborda o endereçamento de atributos de qualidade.
    • Application Archetypes: Guias específicos para tipos de arquiteturas específicas, como por exemplo: Web, RIA, Rich Client, Mobile e Services. 
  • Performance Testing Guide for Web Applications (2007): O nome também já diz tudo. Também é um guia criado pelo grupo Patterns e Practices e disponibilizado gratuitamente pela Microsoft. Foi construído com base em experiências práticas aprendidas por diversos profissionais do ramo. O e-book abrange a inclusão do teste de performance em ambientes ágeis e estruturados (p. ex. CMMI), técnicas de teste de performance (p. ex.: teste de carga, teste de stress) e também atividades chave relacionadas (identificação de objetivos, design e execução dos testes, análise e report de resultados). 
  • ebook Arquitetura de Soluções (v.1.0.1 – 2009): Trata-se de uma compilação de diversos assuntos abordados pelo arquiteto de soluções Waldemir Cambiucci, da Microsoft, em seu blog ao longo de dois anos. Dentre os diversos assuntos, constam textos sobre SOA, SaaS, interoperabilidade, modelos de maturidade, recursos da plataforma Microsoft, frameworks de desenvolvimento, domain specific language e diversos outros.

  

Leitura recomendada

Leitura recomendada