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.)
• Localização (linguagem utilizada, formatos de datas, etc.)
• Aparência
• Permissionamento
• 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)
• Metadados (Parametrização ou Comportamentos pré-programados)
• Pattens de Criação de Objetos
• Patterns de Composição:
• Linguagens
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?
• 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.