Padrão de design para aplicar a conversão a várias propriedades em várias classes

StackOverflow https://stackoverflow.com/questions/254060

  •  05-07-2019
  •  | 
  •  

Pergunta

Estou usando o WMD Markdown Editor em um projeto para um grande número de campos que correspondem a um grande número de propriedades em um grande número de classes de entidade. Algumas classes podem ter várias propriedades que exigem a remarca.

Estou armazenando o marco em si, pois isso facilita a edição dos campos mais tarde. No entanto, preciso converter as propriedades em HTML para exibição posteriormente. A questão é: existe algum padrão que eu possa usar para evitar escrever código de conversão em todas as minhas classes de entidade?

Criei uma classe de utilitário com um método que aceita uma string de marcação e retorna o HTML. Estou usando o MarkDownJ e isso funciona bem.

O problema é para cada propriedade de cada classe que armazena o Markdown, posso precisar de outro método que se converte ao HTML:

public class Course{

     private String description;
     .
     .
     .
     public String getDescription(){
          return description;
     }

     public String getDescriptionAsHTML(){
          return MarkdownUtil.convert(getDescription());
     }
     .
     .
     .
 }

O problema é que, se a classe do curso tiver mais 2 propriedades e pré -requisitos dizem, que ambos precisam de conversores, terei que escrever gettuitioShtml () e getpresequisiteHtml ().

Acho isso um pouco feio e gostaria de uma solução mais limpa. As classes que exigem isso não fazem parte de uma única hierarquia de herança.

A outra opção que estou considerando é fazer isso no controlador e não no modelo. Quais são seus pensamentos sobre isso?

Obrigado.

Editar]: Novos pensamentos (obrigado Jasper). Como o projeto usa o STRUTS2 (eu não disse isso antes), eu poderia criar um componente de visualização dizer que converterá o markdown para mim. Então eu uso isso onde quer que eu precise exibir o valor como HTML.

Foi útil?

Solução

As classes que exigem isso não fazem parte de uma única hierarquia de herança.

Eles devem pelo menos implementar uma interface comum, caso contrário, criar uma solução genérica limpa será pesada.

A outra opção que estou considerando é fazer isso no controlador e não no modelo. Quais são seus pensamentos sobre isso?

Isso claramente é uma responsabilidade da visão. A regra nº 1 do MVC é que o modelo não se preocupa com sua representação, com o markdown neste caso.

No entanto, sinto que há poucos detalhes sobre sua arquitetura atual para dar uma resposta significativa à sua pergunta.

Outras dicas

Você tem uma opção para fazer isso se não puder usar herança ou interface. Eu sei, eu sei o refattor, mas isso é realidade e *hit acontece.

Você pode usar a reflexão para iterar sobre suas propriedades e aplicar a formatação a elas. Você pode marcá -los com um atributo ou adotar um esquema de nomenclatura (quebradiço, mas ainda uma opção).

Ignorando os problemas arquitetônicos, acho que a resposta simples poderia ser:

public String getDescription(MarkDownUtil converter)
{
    if (converter == null) return description;
    else return MarkdownUtil.convert(description);
}

Melhor ainda seria fazer com que o MarkDownutil implemente o ISTRINGCONVERTER, e você poderia ter vários stringconverters diferentes para diferentes trabalhos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top