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.