Synchronicity

Estava me preparando para conversar esta semana sobre customização num evento de arquitetos quando me deparei com o anúncio do Unity Application Block.

Este bloco contem toda a infra-estrutura para implementar os patterns de Inversion of Control e Dependency Injection – dois patterns muito úteis para usar em configurações de software. Vale a pena uma olhada!

Me preparando para falar no evento, acabei encontrando os seguintes lugares comuns onde fazemos a customização em uma aplicação:

• Localização (linguagem utilizada, formatos de datas, etc.)

• Aparência

  • Estática: (ex.: cor, ícones) – Styles/Templates/CSS
  • Dinâmica: (ex.: WebParts)

• Permissionamento

  • Modifica funcionamento interno das regras de negócio (ex.: queries)
  • Também modifica a aparência (menus, habilitação de objetos, etc.)

• Funcionalidade:

  • Novos Objetos Visuais (ex.: Campos na Tela)
  • Relatórios
  • Novas Telas
  • Itens de Menu
  • Workflows
  • Regras de Negócio

As técnicas mais comuns que encontrei foram:

• Metadados (Parametrização ou Comportamentos pré-programados)

  • Arquivos de Configuração
  • Banco de Dados (Personalização, meta-descritores)
  • Patterns: Cache

• Pattens de Criação de Objetos

  • Factories
  • Object Injection
  • Add-Ins/ SandBox

• Patterns de Composição:

  • Pipeline
  • Workflow

• Linguagens

  • Linguagens Declarativas (ex.: XAML e resources)
  • Linguagens de Fórmulas
  • Linguagens Genéricas
  • Patterns: Framework e Mapeamento Conceitual X Físico (pense em Entity Framework)

Minhas maiores preocupações que vou levar para discussão são:

• Como levar a customização para a massa de programadores?

• Como lidar com versionamento do código em contraste com o versionamento da base de dados e comportamentos previamente customizados?

• Como encontrar e definir os pontos de variação que vamos inserir no código e que técnica usar?

• Que modelo de negócio utilizar usar? Customização pelo usuário, por terceiros ou pela própria empresa?

• Como realizar os testes?

Ao seguir o histórico dos frameworks (.Net, Enterprise Library, Applications Blocks, ou frameworks Ruby ou Java) noto que estamos perto de completar a lista das técnicas acima.

O próximo ponto de parada parece ser: ganhar maestria no uso delas.