Abstraindo formatação de dados UI

votos
1

Eu tenho algumas entidades que têm propriedades decimais sobre eles. propriedades dessas entidades são exibidos em vários lugares ao longo da minha UI.

Atualmente eu estou encontrando-me a fazer:

litWeight.Text = person.Weight.ToString(0.00);

por todo o lugar. Agora eu sei para um fato que em vários casos, e estou desconfiado de muitas outras que o cliente é provável que querem os valores a 3d.p. no futuro.

Existe algum padrão I pode empregar para lidar com a formatação desta propriedade Peso (e outras propriedades, não apenas decimais, talvez datas etc.) para que eu possa ter essa formatação em um único lugar?

Eu sei que poderia usar um FormatString na webconfig, ou escrever alguns métodos de extensão na interface do usuário, mas estes não parecem soluções muito elegantes.

Seria bom ter alguns objetos de formatação que são amarrados aos meus entidades, pelo que a sua inerentemente óbvio que formatador de usar.

Obrigado,

Andrew

Publicado 10/12/2008 em 12:49
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

A solução mais simples seria fazer uma classe de utilitário com métodos estáticos que apropriadamente formatar diferentes tipos de valores e chamá-los. Por exemplo:

litWeight.Text = Utility.FormatWeight(person.Weight);
Respondeu 10/12/2008 em 13:07
fonte usuário

votos
1

Você poderia criar um controle básico do usuário - decorrente da etiqueta ou similar - que é responsável exclusivamente para a exibição de uma string peso para que então você tem:

weightValue.DisplayValue(person.Weight);

eo setter formata o decimal, conforme necessário. Se este é usado sempre que você exibir um peso, então você só tem que alterar o controle de usuário para alterar todos os monitores de peso.

A versão básica poderia ser:

public void DisplayValue(decimal weight)
{
    this.Text = weight.ToString("0.00");
}
Respondeu 10/12/2008 em 16:31
fonte usuário

votos
1

você não pode adicionar um método para as entidades para a formatação themeslves? Em seguida, cada objeto pode delegar a um objeto 'estratégia' para fazer a formatação real.

A razão para isso é tanto para ser capaz de mudar as casas decimais etc, mas também para permitir que coisas como internacionalização - formatação decimal depende da localidade; Alguns países usam vírgulas decimais em vez de pontos, ou dígitos do grupo em diferentes trios etc. conjuntos

EDIT: O comentário foi isso coloca código de apresentação na camada de domínio. Verdade, então aplicar a correção padrão para todos os problemas de design; adicionar mais uma camada de engano :)

Você não pode querer ter o MVC completo, mas o conceito de visão e modelo ainda parece adequado. Talvez, para cada entidade, definir uma classe View, assim PersonView que mantém uma referência a um objeto Pessoa e tem propriedades chamado format_weight etc para cada propriedade de pessoa que é de interesse? Ele ainda deve usar um padrão Estratégia para a formatação real.

Portanto, o seu exemplo seria

PersonView pv = new PersonView(person)

litWeight.Text = pv.format_weight();

(Por favor, desculpe erros sintáticos, eu não falo C #)

Se você quiser, você pode fazer PersonView gota de substituição para a pessoa, seja por reimplementar os métodos / propriedades e delgating para a pessoa referenciada, ou por herança de Pessoa ao fazer PersonView?

Respondeu 10/12/2008 em 13:08
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more