minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Índice
Índice
(2) Objeto de dados transmitido
(1) Convenção de nomenclatura de banco de dados:
(2) Especificações de anotação:
(3) Especificações de nomenclatura:
(4) Especificações de front-end e back-end:
(2) Crie um novo projeto e convide seus colegas de equipe:
(3) Escrevendo especificações para documentos de interface
4. Função de depuração (deve conhecer o backend)
(Uma pessoa não pode dominar o país!!!)
Os específicos são:
(1) Camada de entidade: A camada de entidade armazena entidades de objetos específicos, correspondentes aos objetos no banco de dados.
(2) Camada DAO: (pode ser subdividida em duas camadas (camada de interface do dao e camada de implementação do dao)) é a camada que interage com o banco de dados, envolvendo algumas operações de adição, exclusão, modificação e consulta do banco de dados.
(3) Camada de serviço (pode ser subdividida em duas camadas (camada de interface de serviço e camada de implementação de serviço)): principal responsável pelo design lógico da aplicação dos módulos de negócios.
(4) Camada Controladora: A camada Controladora é responsável pelo controle de processos específicos do módulo de negócios. A camada controladora é responsável pela interação front-end e back-end, aceitando solicitações front-end, chamando a camada de serviço, recebendo dados retornados por. a camada de serviço e, finalmente, retornando páginas e dados específicos ao cliente.
(5) Camada util: A camada de ferramentas coloca classes de ferramentas comumente usadas. Por exemplo, alguns métodos comuns podem ser escritos como uma função util e, então, o código geral pode ser simplificado.
(6) Camada de exceção: você pode escrever uma camada de exceção de retorno unificada.
(7) Camada de filtro: Camada de filtro, como filtragem uniforme de autenticação de identidade. Se o filtro não passar, ele estará apenas no modo convidado.
DTO é a estrutura de dados enviada pela solicitação de front-end.
VO é a resposta retornada pelo backend em resposta à solicitação enviada pelo frontend.
PO é a correspondência real entre a entidade do objeto e a tabela de objetos do banco de dados.
BO é a entidade objeto no processo de processamento de negócios.
Por favor, nomeie-o em inglês, não em pinyin chinês.
Seja fácil de entender, não sofisticado.
Use nomes de corcunda em vez de nomes comuns.
Use quebras de linha em intervalos e não escreva parágrafos longos.
Seja anotado, não individualista.
Não use palavras-chave, palavras reservadas, etc. que tenham significados especiais no próprio Java! ! !
(1) O nome da tabela é exclusivo e vários nomes de tabelas não podem usar o mesmo nome.
(2) O nome da tabela deve ser uma combinação de letras minúsculas e sublinhados. Tente evitar o uso de letras maiúsculas ou caracteres especiais. Use "user_info" assim, ou "tbl_user" ou "tbl_user_info".
(3) Não entre em conflito com palavras-chave,Para desabilitar palavras reservadas, como like, desc, range, match, delay, etc., consulte as palavras reservadas oficiais do MySQL.
(4) Nome do campo do banco de dados: consiste em 26 letras inglesas (diferenciando maiúsculas de minúsculas) mais o sublinhado '_', como "user_id", "user_name", "user_password", "user_register_time", "user_login_time".
(5) Especificações de chave primária e estrangeira:
Chave primária: pk_+nome da tabela
Por exemplo:pk_main
Chave estrangeira: fk_+nome da tabela escrava+_+nome da tabela principal
Por exemplo:fk_sub_main
(1) Anotação de classe:
As anotações de classe (Class) são usadas principalmente para declarar para que a classe é usada, bem como algumas informações como o criador, a data de criação, a versão, o nome do pacote, etc.:
/**
* @versão: V1.0
* @autor: fendo
* @className: usuário
* @packageName: usuário
* @description: Esta é a classe do usuário
* @data: 2024-07-01 12:20
**/
(2) Anotação do método (Construtor):
/**
* @autor: fendo
* @methodsName: adicionarUsuário
* @descrição: Adicione um usuário
* @param: xxxx
* @return: Cadeia de caracteres
* @lança:
*/
(3) Comentários do bloco de código: explique o propósito de uma determinada parte do seu código
/**
* Instanciar um usuário
* xxxxxxx
*/
Usuário user=new User();
(4) Comentários de frase única: comente seu código individual
User user=new User(); //Instancia um usuário
Nomeie-o para que outras pessoas possam entendê-lo, nomeie-o em caixa de camelo e faça distinção entre maiúsculas e minúsculas.
Por exemplo: UserController, FileController, BookService
Por exemplo: getUserName(), userLogin(), getMessage();
Por exemplo: MAX_STOCK_COUNT/CACHE_EXPIRED_TIME
1) O método para obter um único objeto é prefixado com get.2) Os métodos para obter vários objetos são prefixados com lista e terminam com plural, como: listObjects3) O método de obtenção de valores estatísticos é prefixado com contagem.4) O método de inserção é prefixado com salvar/inserir.5) O método de exclusão é prefixado com remover/excluir.6) O método modificado é prefixado com atualização.
1) Objeto de dados: xxxDO, xxx é o nome da tabela de dados.2) Objeto de transferência de dados: xxxDTO, xxx é o nome relacionado à área de negócio.3) Objeto de exibição: xxxVO, xxx geralmente é o nome da página da web.
Usar objetos existentes é uma grande armadilha. Recomenda-se usar o método equals para julgamento.
Exemplo positivo:(1) Especifique um intervalo de erro. Se a diferença entre dois números de ponto flutuante estiver dentro desse intervalo, eles serão considerados iguais.flutuador a = 1,0 °F - 0,9 °F ;flutuador b = 0,9 °F - 0,8 °F ;flutuador diferente = 1e-6F ;se ( Matemática . abdômen ( a - b ) < diferente ) {Sistema . fora . imprimir ( "verdadeiro" );}(2) Use BigDecimal para definir o valor e, em seguida, execute operações com números de ponto flutuante.BigDecimal a = novo GrandeDecimal ( "1.0" );BigDecimal b = novo GrandeDecimal ( "0.9" );GrandeDecimal c = novo GrandeDecimal ( "0.8" );GrandeDecimal x = a . subtrair ( b );BigDecimal y = b . subtrair ( c );se ( x . comparado a ( e ) == 0) {Sistema . fora . imprimir ( "verdadeiro" );}
tipo de identificador | Regras de nomenclatura | exemplo |
Pacotes | O prefixo de um nome de pacote exclusivo é sempre composto por letras ASCII minúsculas e é um nome de domínio de nível superior, geralmente com, edu, gov, mil, net, org ou o código inglês de dois caracteres que identifica o país especificado pela 1981 Padrão ISO 3166. As partes subsequentes do nome do pacote variam de acordo com as convenções de nomenclatura internas de diferentes organizações. Essas convenções de nomenclatura podem usar a composição de nomes de diretórios específicos para distinguir departamentos, projetos, máquinas ou nomes de login. | com.sun.eng com.apple.quicktime.v2 edu.cmu.cs.bovik.queijo |
Aulas | Regras de nomenclatura: O nome da classe é um substantivo, usando maiúsculas e minúsculas, com a primeira letra de cada palavra em maiúscula. Tente manter os nomes das aulas concisos e descritivos. Use palavras completas, evite abreviações (a menos que a abreviatura seja mais amplamente usada, como URL, HTML) | classe Raster; classe ImageSprite; |
Interfaces | Regras de nomenclatura: as regras de caso são semelhantes aos nomes de classes | interface RasterDelegate; interface de armazenamento; |
Métodos | O nome do método é um verbo, em maiúsculas e minúsculas, com a primeira letra da primeira palavra em minúscula e a primeira letra das palavras subsequentes em maiúscula.Nomeação de caixa de camelo | correr(); corra rápido(); obterFundo(); |
Variáveis | Exceto para nomes de variáveis, todas as instâncias, incluindo classes e constantes de classe, estão em letras maiúsculas e minúsculas, com a primeira letra da primeira palavra sendo minúscula e a primeira letra das palavras subsequentes sendo maiúscula. Os nomes das variáveis não devem começar com sublinhado ou cifrão, embora isso seja sintaticamente permitido. Os nomes das variáveis devem ser curtos e descritivos. Os nomes das variáveis devem ser escolhidos de forma que sejam fáceis de lembrar, ou seja, que indiquem sua finalidade. | Lista<User> Lista de usuários; String nome_do_usuário; |
Constantes | As declarações de constantes de classe e constantes ANSI devem estar em letras maiúsculas, com palavras separadas por sublinhados. (Tente evitar constantes ANSI, que podem facilmente causar erros) | estático final int MIN_WIDTH = 4; estático final int MAX_WIDTH = 999; estático final int GET_THE_CPU = 1; |
a) GET: Obtenha recursos do servidor. (pode ser visto como uma operação de seleção)b) POST: Crie um novo recurso no servidor. (pode ser considerado como operação de inserção)c) PUT: Atualiza recursos no servidor. (pode ser visto como uma operação de atualização)d) DELETE: Exclui recursos do servidor. (pode ser considerado como operação de exclusão)
code
:código de status http message
: Informações de descrição de texto correspondentes data
list
dict
- {
- "code": 200,
- "message": "new user has created",
- "data": {
- "id": "user-4d51faba-97ff-4adf-b256-40d7c9c68103",
- "firstName": "crifan",
- "lastName": "Li",
- "password": "654321",
- "phone": "13511112222",
- "createdAt": "2016-10-24T20:39:46",
- "updatedAt": "2016-10-24T20:39:46"
- ......
- }
- }
(3) Código de status de resposta
Erro:
Sucesso 2XX
200 ok (solicitação bem-sucedida)
204 nenhum conteúdo (a solicitação foi bem-sucedida, mas nenhum resultado foi retornado)
206 conteúdo parcial (o cliente solicita uma parte do recurso, o servidor responde com sucesso e retorna uma gama de recursos)
Redirecionamento 3XX
301 mover permanentemente (redirecionamento permanente)
302 encontrado (redirecionamento temporário)
303 veja outro (indica que por existir outra URI para o recurso correspondente à requisição, deverá ser utilizado GET
Método direcionado para obter o recurso solicitado)
304 não modificado (indica que quando o cliente usa acesso condicional a um recurso, o servidor encontra o recurso, mas as condições da solicitação não atendem às condições. Não tem nada a ver com redirecionamento)
Redirecionamento temporário 307 (mesmo significado de 302)
Erro do cliente 4XX
400 solicitação incorreta (há um erro de sintaxe na mensagem de solicitação)
401 não autorizado (requer autenticação (primeiro retorno) ou falha na autenticação (segundo retorno))
403 proibido (a solicitação foi rejeitada pelo servidor)
404 não encontrado (o recurso solicitado não pode ser encontrado no servidor)
Erro de servidor 5XX
500 erro interno do servidor (ocorreu um erro quando o servidor executou a solicitação)
503 serviço indisponível (o servidor está sobrecarregado ou inoperante para manutenção e não consegue atender à solicitação)
ilustrar: O limite padrão do nginx é de 1 MB e o limite padrão do tomcat é de 2 MB. Quando houver necessidade comercial de transferir conteúdo maior, você poderá aumentar o limite do lado do servidor.
ilustrar: Depois que a instrução return no bloco try for executada com sucesso, ela não retornará imediatamente, mas continuará a executar a instrução no bloco finalmente. Se houver uma instrução return aqui, ela retornará diretamente aqui, descartando impiedosamente o ponto de retorno no bloco. tente bloquear.
Link: Clique no link para baixar o apifox diretamente (basta baixar a versão mais recente). Apifox – uma plataforma de colaboração integrada para documentação, depuração, simulação e testes de API. Possui funções como gerenciamento de documentos de interface, depuração de interface, simulação e testes automatizados, e a eficiência do desenvolvimento, teste e depuração conjunta de interface é aumentada em 10 vezes. A melhor ferramenta de gerenciamento de documentos de interface e ferramenta de teste de automação de interface.https://apifox.com/
1. Crie sua equipe e crie um novo projeto:
Convide seus companheiros de equipe
2. Crie uma nova interface e um novo modelo de dados:
(1) Determine qual é a solicitação (POST, GET, PUT, DELETE):
(2) O ambiente de teste deve ser unificado e os URLs em diferentes ambientes são diferentes:
(3) Os parâmetros de solicitação são configurados:
Quais parâmetros estão configurados? Forneça exemplos de parâmetros, nomes chineses e descrições de parâmetros.
(4) A resposta deve ser configurada:
Por exemplo, é necessário especificar que tipo de informação é retornada em diferentes estados, e deve haver exemplos de sucesso e exemplos de exceção (para conveniência do front end).
- {
- "code": 200,
- "message": "登入成功",
- "data": {
- "user_id": 27,
- "user_name": "孟霞",
- "user_password": "123456",
- "user_age": "15",
- "user_photo": "http://dummyimage.com/400x400",
- "user_last_time": "1996-12-11 09:03:49",
- "user_indentity": "messager",
- "user_birthday": "2024-02-23"
- }
- }
(5) O modelo de dados pode ser criado:
Você pode criar vários modelos de dados, o que é muito conveniente para retornar campos de resposta e também para o front-end visualizar seus campos de dados.
As especificações de escrita e detalhes específicos do apifox.
Início rápido do Apifox | Documentação de ajuda do Apifoxhttps://apifox.com/help/
(1) Deve haver uma introdução no início do documento de interface da API. Esta seção pode incluir o seguinte:
O objetivo desta parte é permitir que os leitores entendam a situação básica e as informações básicas da interface da API.
(2) Lista de interfaces
A seguir, no documento de interface da API, precisamos listar todas as interfaces. Cada interface deve conter as seguintes informações:
O objetivo desta seção é permitir que os leitores entendam rapidamente as informações básicas de cada interface e utilizem as interfaces corretamente com base nos exemplos do documento.
(3) Descrição dos parâmetros de solicitação e parâmetros de resposta
Após a lista de interfaces, precisamos detalhar os parâmetros de solicitação e de resposta de cada interface. Esta seção deve incluir as seguintes informações:
Para tipos e formatos de parâmetros, você pode usar tipos e formatos de dados padrão ou definir seus próprios tipos e formatos de dados de acordo com circunstâncias específicas. Se os valores obrigatórios e padrão precisam ser determinados com base na situação real.
(4) Descrição do código de erro
Ao usar a interface API, às vezes ocorre um erro. Nesse caso, um código de erro precisa ser retornado para explicar o tipo e a causa do erro. Portanto, na documentação da interface API, precisamos especificar todos os códigos de erro possíveis. Esta seção deve incluir as seguintes informações:
O objetivo desta seção é que o leitor entenda todos os possíveis tipos e causas de erros e seja capaz de lidar com os erros corretamente com base nos exemplos da documentação.
(1) Operações específicas:
Definir uma classe de teste
sugestão:
Nome da classe de teste: Nome da classe testada Test CalculatorTest
Nome do pacote: xx.xx.xx.test cn.itcast.test
Definir métodos de teste: podem ser executados de forma independente
sugestão:
Nome do método: nome do método de teste testAdd()
Valor de retorno: nulo
Lista de parâmetros: parâmetros vazios
Adicione @Test ao método
Importar ambiente de dependência Junit
resultado do julgamento:
Vermelho: falhou
verde: sucesso
Geralmente usamos o método estático assertEquals(expected, actual) na classe Assert para lidar com nossos resultados esperados e resultados de saída
Assert.assertEquals(3, resultado);
Os dois parâmetros são: valor esperado valor do resultado do programa
Por que usar Assert.assertEquals(expected, actual) para processar resultados de testes?
Porque estipulamos que o vermelho representa o fracasso e o verde representa o acerto. Quando usamos um método de teste para testar o método de adição de um computador, apenas produzimos este resultado (assumindo que nenhuma exceção ocorre). Se inserirmos 1 e 3, esperamos obter o resultado 4, mas o que produzimos é 2 e o que esperamos obter é 4. O resultado obtido neste momento não atende às nossas expectativas, mas o resultado em execução ainda é verde (representando correto), isso não está correto? Neste momento, podemos usar o método assertEquals do Assert no final para comparar o valor esperado e o valor do resultado gerado pelo programa. se não forem iguais, será vermelho. Este tempo atende à nossa definição de verde e vermelho?
- package cn.itcast.test;
-
- import cn.itcast.junit.Calculator;
- import org.junit.Assert;
- import org.junit.Test;
-
- public class CalculatorTest {
- /**
- * 测试add方法
- */
- @Test
- public void testAdd(){
- Calculator c = new Calculator();
- int a = 1, b = 2;
- int result = c.add(1, 2);
- Assert.assertEquals(3, result);
- }
-
- /**
- * 测试sub方法
- */
- @Test
- public void testSub(){
- Calculator c = new Calculator();
- int a = 1, b = 2;
- int result = c.sub(1, 2);
- Assert.assertEquals(-1, 2);
- }
- }
-
@Antes
Adicione @Before antes de um método de teste e ele se tornará um método de inicialização. Este método será executado automaticamente antes que todos os métodos de teste sejam executados.
@Depois
Adicione @After antes de um método de teste e ele se tornará um método de liberação de recursos, que será executado automaticamente após todos os métodos de teste serem executados.
O método decorado com @Before será executado antes da execução do método de teste.
O método decorado com @After será executado após a execução do método de teste.
Os métodos modificados com @Before ou @After serão executados independentemente de o método de teste ocorrer.
(2) Gerar automaticamente plug-ins de classe de teste
(1) Ao escrever o documento de interface no back-end, ele deve ser escrito de forma clara e clara para que seu front-end possa entendê-lo. Não deve ser escrito de forma padronizada. O nome reescrito e a resposta da interface do valor padrão devem ser bem escritos.
(2) Além do que é ensinado, você pode aprender outras coisas sozinho, como registro de verificação de e-mail, login com código de verificação, c3p0, criptografia MD5, registros de log, estilo de resultado, etc.
(3) A escrita do código também deve ser padronizada e a lógica deve ser rigorosa (cookie, sessão), onde o julgamento vazio é necessário, o julgamento vazio deve ser feito e onde a segurança pode ser aumentada, você pode aprender com isso;
(4) O front-end e o back-end devem cooperar bem. Não deixe o back-end fazer o que quer sem dizer uma palavra ao front-end. A resposta interativa do front-end e back-end também faz parte da avaliação, representando grande parte. A interface que você escreveu não pode ser executada apenas por meio do apifox. Há algum erro quando apresentado na página específica do front-end. ? Há algum problema lógico, etc. Pode ser necessário considerar.
(5) Durante a análise de demanda, estipule as funções e interfaces que você deseja executar. Se você executou algumas funções, mas o front-end não as executou, você pode pressioná-las se as coisas que elas fizeram exigirem do seu back-end. interfaces/data , se você não escreveu, reflita com cuidado e comunique mais.
Você pode comparar com projetos que realmente funcionam ou algo semelhante, como um site de compras. Então você deve comparar com o Taobao as interfaces de back-end que este site pode ter, os módulos funcionais que ele pode ter e os detalhes específicos.
(6) Não busque mais cegamente, seja lógico e razoável e aprenda a simplificar as partes que podem ser simplificadas. Mas o número básico de interfaces e o volume de código também devem ser garantidos. (As interfaces que escrevemos originalmente tinham basicamente mais de 40)