PoC | TryAngels (R&D)

Resumo Executivo

R&D

PoC

Segunda Edição

Terceira Edição

Referências

[Código fonte incluso]

↑ Topo ↑

en

PoC – Proof of Concept

Nesta iniciativa, eu optei por utilizar as mesmas tecnologias e ferramentas que utilizo normalmente em situações semelhantes. Implementei uma aplicação Windows (WinForm) – framework .NET versão 4.5, C# – como protótipo [força do hábito] e instrumento de comprovação de nossas ideias e de validação de nossas hipóteses e pressupostos.

Dada a natureza e as características desta iniciativa (PoC), posicionei todo o código em um único arquivo, embora tenha procurado obedecer e observar fielmente aos princípios e conceitos OOP (object oriented programming), como abstração, princípio da responsabilidade única, etc.

Meus esforços resultaram então em uma estrutura que pode ser logicamente assim representada:

layers

Figura 1. Fluxo dos dados pelas camadas lógicas da solução

E no final a cara do aplicativo ficou assim:

ui-stats

Figura 2. Projeto TryAngels v.: 0.0.0.1 (PoC) – Tela Inicial

Espero ter conseguido satisfazer o requerimento de fornecer uma interface amigável e intuitiva, fácil e atraente [MKT appeal].

Através da tela acima, o usuário tem acesso a todos os requerimentos funcionais. Com relação aos requerimentos não funcionais (além da usabilidade, já mencionada), questões relacionadas a velocidade e memória são inversamente proporcionais, neste caso.

Quanto maior a quantidade de objetos, maior o tempo de processamento: menor a performance. Precisamos encontrar então uma maneira de minimizar a quantidade de objetos criados e manipulados, a fim de otimizar a velocidade e a utilização da memória, simultaneamente.

É possível? Acredito que sim.

Como? KISS – Keep it simple, smarty!

Na Figura 6, por exemplo, não criamos nem 118 nem 28 para representar um triângulo de lado 7. Mas apenas um. Através da manipulação das propriedades (de localização, neste caso) de um único triângulo de lado 1 (unitário), podemos representar triângulos com enormes quantidades de unidades de medida de lado; garantindo assim tanto a otimização do espaço de armazenamento como do tempo de processamento.

É necessário um número absurdamente grande (18.446.744.073.709.551.615; para ser mais exato) para atingirmos os limites de processamento.

Perceba que, da mesma forma como manipulamos a localização do objeto, também podemos alterar outras propriedades, como cores, direção, sentido etc. – com a mesma eficiência, eficácia e otimização de recursos computacionais.

E a fim de verificar a velocidade de processamento de nossos algoritmos, criamos alguns testes de performance (veja a próxima figura).

ui-perf

Figura 3. Projeto TryAngels v.: 0.0.0.1 (PoC) – Tela de Testes de Performance

Embora rudimentares, tais testes podem fornecer – através da simulação de diversos cenários (casos) de uso – numerosos e valorosos insights. É sabido, por exemplo, que processamento em paralelo só é recomendado para grandes quantidades de processamento e/ou dados. Caso contrário, o processamento sequencial tende a se mostrar mais performático.

Por fim, disponibilizamos o código fonte, a fim de que o mesmo possa ser analisado, conforme figura abaixo.

ui-source

Figura 4. Projeto TryAngels v.: 0.0.0.1 (PoC) – Código Fonte

Ainda que não se configure como um protótipo evolutivo, dado que muitos dos fundamentos de tal abordagem não estejam presentes; a presente implementação também não pode ser considerada um protótipo descartável, já que a mesma tanto contempla diversos conceitos e princípios importantes, como adota e exemplifica várias boas práticas e design patterns – ainda que de forma elementar, afinal trata-se de um PoC.

Gosto de pensar em meus PoCs como “protótipos pré-evolutivos”. Para que se possa apresentar a presente solução realmente como um protótipo evolutivo, vários outros conceitos, princípios e práticas devem ser consideradas e devidamente contempladas. Dentre elas:

  • Uma verdadeira implementação de N camadas;
  • MVC (com Razor e Bootstrap, talvez), ou MVVM;
  • IoC/DI;
  • DDD, TDD, BDD;
  • Controle de versão (de todos os artefatos do projeto, não apenas do código);
  • Isolamento de ambientes operacionais (DEV, QA, etc.): SOX – Sarbanes-Oxley Act 2002;
  • Metodologia(s) de governança corporativa e de TI (COBIT, ITIL, TOGAF, CMMI, ISO, …);
  • Entre outras (como autorização, versionamento, segurança, etc.).

Recomendamos ainda (como sempre) que desde o início se adote uma arquitetura orientada a serviços, ou SOA (preferencialmente sob a orientação de Thomas Erl), bem como que se considere os conceitos e requisitos da computação distribuída e/ou em nuvem (hibrida, de preferência).

Afinal, a tendência natural de toda boa idéia, projeto e iniciativa é crescer e se multiplicar.

É crucial, portanto, que cresçamos a partir de sólidos (seguros e confiáveis) fundamentos, para que estejamos melhor preparados para os desafios que o futuro certamente nos apresentará.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: