Onde formatar? Estamos usando o padrao MVC, mas onde e o melhor local para formatar um valor? No Model, no View, ou no Controller?Model) Foi feita uma tentativa de formatar no Model, existem duas classes Model que deveriam receber a implementacao: Modelo e Grid.- Classe Modelo: os atributos desta classe seriam formatados automaticamente apos rodar o metodo "encontrar" (que carrega os valores). Notou-se que se o valor de um atributo estivesse sempre formatado no Model, quando o Controller fosse utiliza-lo para efetuar calculos (datas, monetarios, etc) ele teria que "desformatar" o valor e depois formatar novamente. Sendo que o Controller fazer isso e algo bastante comum. Um outro problema registrado foi o fato de que nem sempre se deseja todos os atributos formatados, pois na pagina de consulta se necessita os valores de um jeito, mas na alteracao de outro.Uma solucao para estes problemas foi criar um metodo que retornasse um array com os valores formatados, sendo que os valores dos atributos permaneciam originais.- Classe Grid: a formatacao via Model, para montantes de dados carregados em grid's, implicaria na construcao de um metodo que percorreria todos os valores e formataria de acordo com o tipo de dado.Problema de implementar formatacao nesta camada: muitas vezes temos tipos de dados que tem uma formatacao propria (independe do tipo no BD). Exemplo: campos monetarios (no BD e numerico), CPF, CNPJ, telefone, etc. Nestes casos, se chegou a implementar um metodo para formatacao personalizada de atributo na classe Modelo, porem para a classe Grid se viu dificuldade em se ter a formatacao em montantes de dados grandes e, principalmente, a identificacao de campos com formatacao personalizada.View) Nesta camada a formatacao ocorre somente no momento de exibir os dados para o usuario. Ou seja, todas as formatacoes que se deseja fazer devem ser explicitamente declaradas. Esta ja era a maneira utilizada para formatacao no phpNucleum 4.x, um diferencial que foi implementado no phpNucleum 5 e a utilizacao pelo Smarty dos mesmos metodos de formatacao usados no PHP. Exemplo:CPF: {$valoresTeste.cpf|escape|formatarCpf}Valor: {$valoresTeste.valor|escape|formatarMonetario}Os modificadores 'formatarCpf' e 'formatarMonetario' sao os proprios metodos Auxilio::formatarCpf e Auxilio::formatarMonetario. Desta forma o codigo de formatacao nao fica redundante (pelo menos entre o PHP e o Smarty).Os locais que possuem funcoes de formatacao sao:- PHP (phpNucleum\Auxilio)- jnGrid (e suas dependencias)- jnCalendar (e suas dependencias)- iReport E fato que usando esta camada se perde a configuracao unica de localizacao, pois ao se desejar a alteracao de uma configuracao de formatacao de data/valor, devem ser alteradas as configuracoes em todos os locais acima mencionados. Porem notou-se que usando a camada Model e Controller isto tambem aconteceria, pois a configuracao de formatacao do jnCalendar e do iReport seria necessaria de qualquer maneira.Controller) Nao se percebeu muita diferenca entre realizar a formatacao nesta camada e na camada View. Porem o problema de formatar montantes grandes de dados se repetiria nesta camada (percorrer todos os registros e fazer formatacao personalizada).ConclusaoTodas as camadas tem seus pros e contras, as camadas Model e Controller tem problemas com desempenho, pois percorrer 18 mil registros para formatar valores de cpf, data, valores, etc e bastante