Quando o desenvolvimento real, muitos dos parâmetros de interface de serviços como complexo como um multi-estágio irá ser misturado com vários JSON ou matriz aninhada.
Montadas lógica neste momento, se vamos escrever os parâmetros da interface desordenado na camada Controller, a legibilidade do código será muito pobre, que precisa de um follow-up para assumir a lógica de montagem documento interface de front do que deduzir os parâmetros de um parâmetro do parâmetro.
Neste caso, a chamada interface de parâmetros DTO objetos de transmissão de dados encapsular, com as anotações personalizadas podem melhorar muito a legibilidade.
Nós personalizamos um comentário para identificar os parâmetros do nosso dto:
@Retention (RetentionPolicy.RUNTIME) @Target (valor = ElementType.FIELD) público @ interface de ParamAnnotation { // se os parâmetros necessários pública booleana IsRequired () padrão para false ; // nome do parâmetro pública de nomes String (); }
Notas contém duas propriedades, o nome do parâmetro e parâmetro, se necessário.
Desta forma, o nosso código é composto por:
Altera a:
Melhorou significativamente a legibilidade, enquanto nós podemos grupo lógica atribuição relacionada é encapsulado em dto do construtor.
Antes de cada interface de invocação, se podemos concluir pela reflexão em Traverse Checking dto deve passar parâmetros:
/ ** * @author NXY * @date 2020/03/24 19:49 * @param obj: a necessidade de verificar o objeto parâmetro * @ return * @exception * @description determinar se os parâmetros são necessários para preencher * / público booleano isComplete (t obj) lança IllegalAccessException, um NoSuchFieldException { classe objclass = obj.getClass (); O campo, os campos [] = objClass.getDeclaredFields (); para (campo, campo: Campos) { SE (. field.isAnnotationPresent (ParamAnnotation classe )) { field.setAccessible ( como true ); ParamAnnotation ParamAnnotation = field.getAnnotation (ParamAnnotation. Classe ); // se necessário SE (paramAnnotation.isRequired ()) { Object value = Field.get (obj); IF ( nulo == valor) { objecto ParaName = paramAnnotation .name (); // itens em falta write-back campo, exclusão = objClass.getDeclaredField ( "eliminação" ); deletion.setAccessible ( como true ); deletion.set (obj, paraName); retornar falsa ; } } } } Retornar verdadeiro ; }
Para que a nossa lógica camada exterior pelas dezenas de linhas de código se torna:
Vo DTO obtido pelo parâmetro, o parâmetro de verificação de integridade. Vamos controlador lógico apenas para chamar a atenção para a conversão aos poucos descanso e verificar modular.
Enquanto refletindo uma menor eficiência operacional, mas não particularmente alta nas exigências da cena de desempenho, com esses custos em troca da legibilidade do código vale a pena.