le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Sommario
Sommario
(2) Oggetto dei dati trasmessi
(1) Convenzione di denominazione del database:
(2) Specifiche delle annotazioni:
(3) Specifiche di denominazione:
(4) Specifiche front-end e back-end:
(2) Crea un nuovo progetto e invita i tuoi compagni di squadra:
(3) Specifiche di scrittura per documenti di interfaccia
4. Funzione di debug (deve conoscere il backend)
(Una persona non può dominare il paese!!!)
Quelli specifici sono:
(1) Livello di entità: il livello di entità memorizza entità di oggetti specifici, corrispondenti agli oggetti nel database.
(2) Livello DAO: (può essere suddiviso in due livelli (livello di interfaccia di dao e livello di implementazione di dao)) è il livello che interagisce con il database, coinvolgendo alcune operazioni di aggiunta, cancellazione, modifica e query del database.
(3) Livello di servizio (può essere suddiviso in due livelli (livello di interfaccia di servizio e livello di implementazione del servizio)): principalmente responsabile della progettazione logica dell'applicazione dei moduli aziendali.
(4) Livello controller: il livello controller è responsabile del controllo di processi specifici del modulo aziendale. Il livello controller è responsabile dell'interazione front-end e back-end, accettando richieste front-end, chiamando il livello di servizio e ricevendo i dati restituiti. il livello di servizio e infine restituendo pagine e dati specifici al client.
(5) Livello util: il livello strumento inserisce classi di strumenti comunemente utilizzate. Ad esempio, alcuni metodi comuni possono essere scritti come una funzione util, quindi il codice complessivo può essere semplificato.
(6) Livello di eccezione: è possibile scrivere un livello di eccezione di restituzione unificato.
(7) Livello filtro: livello filtro, come il filtraggio uniforme dell'autenticazione dell'identità. Se il filtro non passa, sarà solo in modalità ospite.
DTO è la struttura dati inviata dalla richiesta front-end.
VO è la risposta restituita dal backend in risposta alla richiesta inviata dal frontend.
PO è la corrispondenza effettiva tra l'entità dell'oggetto e la tabella degli oggetti del database.
BO è l'entità oggetto nel processo di elaborazione aziendale.
Per favore, chiamalo in inglese, non in Pinyin cinese.
Sii facile da capire, non fantasioso.
Usa nomi a gobba invece di nomi ordinari.
Usa interruzioni di riga a intervalli e non scrivere in paragrafi lunghi.
Sii annotato, non individualista.
Non utilizzare parole chiave, parole riservate, ecc. che hanno significati speciali nello stesso Java! ! !
(1) Il nome della tabella è univoco e più nomi di tabella non possono utilizzare lo stesso nome.
(2) Il nome della tabella dovrebbe essere una combinazione di lettere minuscole e trattini bassi. Cerca di evitare l'uso di lettere maiuscole o caratteri speciali. Usa "user_info" come questo, o "tbl_user" o "tbl_user_info".
(3) Non entrare in conflitto con le parole chiave,Per disabilitare le parole riservate, come like, desc, range, match, delay, ecc., fare riferimento alle parole riservate ufficiali di MySQL.
(4) Nome del campo del database: è composto da 26 lettere inglesi (con distinzione tra maiuscole e minuscole) più il carattere di sottolineatura '_', come "user_id", "user_name", "user_password", "user_register_time", "user_login_time".
(5) Specifiche della chiave primaria ed esterna:
Chiave primaria: pk_+nome tabella
Per esempio:pk_main
Chiave esterna: fk_+nome tabella slave+_+nome tabella principale
Per esempio:fk_sub_main
(1) Annotazione della classe:
Le annotazioni della classe (Class) vengono utilizzate principalmente per dichiarare a cosa serve la classe, nonché alcune informazioni come il creatore, la data di creazione, la versione, il nome del pacchetto, ecc.:
/**
* @versione: V1.0
* @autore: fendo
* @className: utente
* @packageName: utente
* @description: questa è la classe utente
* @dati: 2024-07-01 12:20
**/
(2) Annotazione del metodo (costruttore):
/**
* @autore: fendo
* @methodsName: aggiungiUtente
* @descrizione: aggiungi un utente
* @parametro: xxxx
* @return: String
* @lancia:
*/
(3) Commenti sul blocco di codice: spiega lo scopo di una determinata parte del codice
/**
* Istanziare un utente
* xxxxxx
*/
Utente utente=nuovo utente();
(4) Commenti a frase singola: commenta il tuo codice individuale
Utente user=new User(); //Istanzia un utente
Assegna un nome in modo che gli altri possano capirlo, chiamalo in maiuscolo cammello e fai distinzione tra maiuscole e minuscole.
Ad esempio: UserController, FileController, BookService
Ad esempio: getUserName(), userLogin(), getMessage();
Ad esempio: MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
1) Il metodo per ottenere un singolo oggetto ha il prefisso get.2) I metodi per ottenere più oggetti hanno il prefisso list e terminano con il plurale, come ad esempio: listObjects3) Il metodo per ottenere valori statistici è preceduto dal conteggio.4) Il metodo di inserimento ha il prefisso salva/inserisci.5) Il metodo di eliminazione ha il prefisso rimuovi/elimina.6) Il metodo modificato ha il prefisso update.
1) Oggetto dati: xxxDO, xxx è il nome della tabella dati.2) Oggetto del trasferimento dati: xxxDTO, xxx è il nome relativo al settore aziendale.3) Oggetto visualizzato: xxxVO, xxx è generalmente il nome della pagina web.
Usare oggetti esistenti è una grossa trappola. Si consiglia di utilizzare il metodo uguale per il giudizio.
Esempio positivo:(1) Specificare un intervallo di errore Se la differenza tra due numeri in virgola mobile rientra in questo intervallo, vengono considerati uguali.galleggiante UN = 1,0 °F - 0,9 °F ;galleggiante B = 0,9 °F - 0,8 °F ;galleggiante diff = 1e-6F ;Se ( Matematica . addominali ( UN - B ) < diff ) {Sistema . fuori . stampa ( "VERO" );}(2) Utilizzare BigDecimal per definire il valore, quindi eseguire operazioni con numeri in virgola mobile.GrandeDecimale a = nuovo GrandeDecimale ( "1.0" );Grande decimale b = nuovo GrandeDecimale ( "0.9" );Grande decimale c = nuovo GrandeDecimale ( "0.8" );Grande decimale x = UN . sottrarre ( B );Grande decimale y = B . sottrarre ( C );Se ( X . Paragonare a ( e ) == 0) {Sistema . fuori . stampa ( "VERO" );}
tipo di identificatore | Regole di denominazione | esempio |
Pacchetti | Il prefisso di un nome di pacchetto univoco è sempre composto da lettere ASCII minuscole ed è un nome di dominio di primo livello, solitamente com, edu, gov, mil, net, org o il codice inglese a due caratteri che identifica il paese specificato dalla normativa del 1981. Norma ISO3166. Le parti successive del nome del pacchetto variano in base alle convenzioni di denominazione interne delle diverse organizzazioni. Tali convenzioni di denominazione possono utilizzare la composizione di nomi di directory specifici per distinguere dipartimenti, progetti, macchine o nomi di accesso. | com.sun.eng com.apple.quicktime.v2 edu.cmu.cs.bovik.formaggio |
Classi | Regole di denominazione: il nome della classe è un sostantivo, utilizzando maiuscole e minuscole, con la prima lettera di ogni parola in maiuscolo. Cerca di mantenere i nomi delle classi concisi e descrittivi. Utilizzare parole complete, evitare abbreviazioni (a meno che l'abbreviazione non sia più ampiamente utilizzata, come URL, HTML) | classe Raster; classe ImageSprite; |
Interfacce | Regole di denominazione: le regole dei casi sono simili ai nomi delle classi | interfaccia RasterDelegate; interfaccia Memorizzazione; |
Metodi | Il nome del metodo è un verbo, in maiuscolo/minuscolo, con la prima lettera della prima parola minuscola e la prima lettera delle parole successive maiuscola.Denominazione del caso del cammello | correre(); correre veloce(); ottieniSfondo(); |
Variabili | Fatta eccezione per i nomi delle variabili, tutte le istanze, comprese le classi e le costanti di classe, sono in maiuscolo/minuscolo, con la prima lettera della prima parola minuscola e la prima lettera delle parole successive maiuscola. I nomi delle variabili non dovrebbero iniziare con un carattere di sottolineatura o con il simbolo del dollaro, sebbene ciò sia sintatticamente consentito. I nomi delle variabili dovrebbero essere brevi e descrittivi. I nomi delle variabili dovrebbero essere scelti in modo che siano facili da ricordare, cioè per indicare il loro scopo. | Elenco<User> lista degli utenti; Stringa nomeutente; |
Costanti | Le dichiarazioni delle costanti di classe e delle costanti ANSI devono essere scritte tutte in maiuscolo, con le parole separate da trattini bassi. (Cerca di evitare costanti ANSI, che possono facilmente causare errori) | intero finale statico MIN_WIDTH = 4; statico finale int MAX_WIDTH = 999; statico finale int GET_THE_CPU = 1; |
a) GET: ottiene risorse dal server. (può essere visualizzato come un'operazione selezionata)b) POST: crea una nuova risorsa sul server. (può essere considerata un'operazione di inserimento)c) PUT: aggiorna le risorse sul server. (può essere visto come un'operazione di aggiornamento)d) DELETE: Elimina le risorse dal server. (può essere considerata un'operazione di eliminazione)
code
:Codice di stato http message
: Informazioni sulla descrizione del testo corrispondente 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) Codice di stato della risposta
Errore:
2XX successi
200 ok (richiesta andata a buon fine)
204 nessun contenuto (la richiesta ha avuto successo, ma non è stato restituito alcun risultato)
206 contenuto parziale (il client richiede una parte della risorsa, il server risponde con successo e restituisce un intervallo di risorse)
Reindirizzamento 3XX
301 sposta in modo permanente (reindirizzamento permanente)
302 trovati (reindirizzamento temporaneo)
303 vedi altro (indica che poiché esiste un altro URI per la risorsa corrispondente alla richiesta, dovrebbe essere utilizzato GET
Metodo diretto ad ottenere la risorsa richiesta)
304 non modificato (indica che quando il client utilizza l'accesso condizionato a una risorsa, il server trova la risorsa, ma le condizioni della richiesta non soddisfano le condizioni. Non ha nulla a che fare con il reindirizzamento)
Reindirizzamento temporaneo 307 (stesso significato di 302)
Errore client 4XX
400 bad request (c'è un errore di sintassi nel messaggio di richiesta)
401 non autorizzato (richiede autenticazione (primo reso) o autenticazione non riuscita (secondo reso))
403 proibito (la richiesta è stata respinta dal server)
404 non trovato (la risorsa richiesta non può essere trovata sul server)
Errore del server 5XX
500 errore interno del server (si è verificato un errore quando il server ha eseguito la richiesta)
503 servizio non disponibile (il server è sovraccarico o inattivo per manutenzione e non può gestire la richiesta)
illustrare: Il limite predefinito di nginx è 1 MB e il limite predefinito di Tomcat è 2 MB. Quando è necessario trasferire contenuti di dimensioni maggiori, è possibile aumentare il limite lato server.
illustrare: Dopo che l'istruzione return nel blocco try è stata eseguita con successo, non ritorna immediatamente, ma continua a eseguire l'istruzione nel blocco final. Se c'è un'istruzione return qui, tornerà direttamente qui, scartando spietatamente il punto di ritorno nel prova a bloccare.
Collegamento: fare clic sul collegamento per scaricare direttamente apifox (basta scaricare l'ultima versione). Apifox: una piattaforma di collaborazione integrata per documentazione API, debug, mocking e test. Ha funzioni come la gestione dei documenti dell'interfaccia, il debug dell'interfaccia, Mock e test automatizzati e l'efficienza dello sviluppo dell'interfaccia, dei test e del debug congiunto è aumentata di 10 volte. Il miglior strumento di gestione dei documenti di interfaccia e strumento di test di automazione dell'interfaccia.Italiano: https://apifox.com/
1. Crea il tuo team e crea un nuovo progetto:
Invita i tuoi compagni di squadra
2. Crea una nuova interfaccia e crea un nuovo modello dati:
(1) Determinare qual è la richiesta (POST, GET, PUT, DELETE):
(2) L'ambiente di test deve essere unificato e gli URL in ambienti diversi sono diversi:
(3) I parametri della richiesta sono configurati:
Quali parametri sono configurati? Fornire esempi di parametri, nomi cinesi e descrizioni dei parametri.
(4) La risposta deve essere configurata:
Ad esempio, è necessario specificare il tipo di informazioni restituite nei diversi stati e devono esserci esempi di successo ed esempi di eccezioni (per comodità del 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) Il modello dati può essere creato:
È possibile creare diversi modelli di dati, il che è molto comodo per restituire i campi di risposta e utile anche per il front-end per visualizzare i campi dati.
Le specifiche di scrittura e i dettagli specifici di apifox.
Guida rapida di Apifox |. Documentazione della guida di Apifoxhttps://apifox.com/help/
(1) Dovrebbe esserci un'introduzione all'inizio del documento dell'interfaccia API. Questa sezione può includere quanto segue:
Lo scopo di questa parte è consentire ai lettori di comprendere la situazione di base e le informazioni di base dell'interfaccia API.
(2) Elenco delle interfacce
Successivamente, nel documento dell'interfaccia API, dobbiamo elencare tutte le interfacce. Ciascuna interfaccia dovrebbe contenere le seguenti informazioni:
Lo scopo di questa sezione è consentire ai lettori di comprendere rapidamente le informazioni di base di ciascuna interfaccia e di utilizzare correttamente le interfacce in base agli esempi contenuti nel documento.
(3) Descrizione dei parametri di richiesta e di risposta
Dopo l'elenco delle interfacce, dobbiamo dettagliare i parametri di richiesta e i parametri di risposta per ciascuna interfaccia. Questa sezione dovrebbe includere le seguenti informazioni:
Per i tipi e formati di parametri, è possibile utilizzare tipi e formati di dati standard oppure definire tipi e formati di dati personalizzati in base a circostanze specifiche. Se i valori richiesti e quelli predefiniti devono essere determinati in base alla situazione reale.
(4) Descrizione del codice errore
Quando si utilizza l'interfaccia API, a volte si verifica un errore. In questo caso, è necessario restituire un codice di errore per spiegare il tipo e la causa dell'errore. Pertanto, nella documentazione dell'interfaccia API, dobbiamo specificare tutti i possibili codici di errore. Questa sezione dovrebbe includere le seguenti informazioni:
Lo scopo di questa sezione è che il lettore comprenda tutti i possibili tipi e cause di errore e sia in grado di gestire correttamente gli errori in base agli esempi nella documentazione.
(1) Operazioni specifiche:
Definire una classe di test
suggerimento:
Nome della classe di test: nome della classe testata Test CalculatorTest
Nome del pacchetto: xx.xx.xx.test cn.itcast.test
Definire metodi di test: può essere eseguito in modo indipendente
suggerimento:
Nome del metodo: nome del metodo di test testAdd()
Valore restituito: vuoto
Elenco parametri: parametri vuoti
Aggiungi @Test al metodo
Importa l'ambiente di dipendenza Junit
risultato del giudizio:
Rosso: fallito
verde: successo
Generalmente utilizziamo il metodo statico assertEquals(expected,actual) nella classe Assert per gestire i risultati attesi e i risultati di output
Assert.assertEquals(3, risultato);
I due parametri sono: valore atteso valore risultato del programma
Perché utilizzare Assert.assertEquals(previsto, effettivo) per elaborare i risultati dei test?
Perché stabiliamo che il rosso rappresenta il fallimento e il verde rappresenta la correttezza. Quando utilizziamo un metodo di test per testare il metodo di addizione di un computer, restituiamo solo questo risultato (assumendo che non si verifichi alcuna eccezione). Se inseriamo 1 e 3, ci aspettiamo di ottenere il risultato 4, ma ciò che produciamo è 2 e ciò che ci aspettiamo di ottenere è 4. Il risultato ottenuto in questo momento non soddisfa le nostre aspettative, ma il risultato corrente è ancora verde (che rappresenta corretto), non è corretto? In questo momento, possiamo utilizzare il metodo assertEquals di Assert alla fine per confrontare il valore atteso e il valore del risultato restituito dal programma. Se sono uguali, sarà verde e se non sono uguali, sarà rosso. Questa volta soddisfa la nostra definizione di verde e rosso?
- 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);
- }
- }
-
@Prima
Aggiungi @Before prima di un metodo di test e diventa un metodo di inizializzazione. Questo metodo verrà eseguito automaticamente prima dell'esecuzione di tutti i metodi di test. Viene generalmente utilizzato per l'applicazione delle risorse.
@Dopo
Aggiungi @After prima di un metodo di test e diventerà un metodo di rilascio delle risorse, che verrà eseguito automaticamente dopo l'esecuzione di tutti i metodi di test.
Il metodo decorato con @Before verrà eseguito prima dell'esecuzione del metodo di test.
Il metodo decorato con @After verrà eseguito dopo l'esecuzione del metodo di test.
I metodi modificati con @Before o @After verranno eseguiti indipendentemente dal fatto che si verifichi il metodo di prova.
(2) Genera automaticamente i plug-in della classe Test
(1) Quando scrivi il documento di interfaccia sul back-end, dovrebbe essere scritto in modo chiaro e chiaro in modo che il tuo front-end possa capirlo. Dovrebbe essere scritto in modo standardizzato. Non scriverlo in modo che tu possa capirlo da solo Il nome riscritto e la risposta dell'interfaccia con il valore predefinito devono essere scritti correttamente.
(2) Oltre a ciò che viene insegnato, puoi imparare altre cose da solo, come la registrazione della verifica e-mail, l'accesso con codice di verifica, c3p0, crittografia MD5, registri di registro, stile dei risultati, ecc.
(3) Anche la scrittura del codice deve essere standardizzata e la logica deve essere rigorosa;
(4) Il front-end e il back-end devono cooperare bene. Non lasciare che il back-end faccia le sue cose senza dire una parola al front-end. Anche la risposta interattiva del front-end e del back-end fa parte della valutazione, e rappresenta una parte importante. L'interfaccia che hai scritto non può essere eseguita solo tramite apifox. Sono presenti errori quando viene presentata nella pagina front-end specifica ? Ci sono problemi logici, ecc. Potrebbe essere necessario prenderli in considerazione.
(5) Durante l'analisi della domanda, stabilisci le funzioni e le interfacce che desideri eseguire. Se hai eseguito alcune funzioni ma il front-end non le ha eseguite, puoi inviarle se le cose che hanno fatto richiedono il tuo back-end interfacce/dati, se non hai scritto, rifletti attentamente e comunica di più.
Puoi confrontare progetti che funzionano davvero o qualcosa di simile, come un sito web di shopping. Quindi dovresti confrontare con Taobao le interfacce back-end che questo sito Web potrebbe avere, i moduli funzionali che potrebbe avere e i dettagli specifici.
(6) Non perseguire ciecamente di più, sii logico e ragionevole e impara a semplificare le parti che possono essere semplificate. Ma deve essere garantito anche il numero base di interfacce e il volume del codice. (Le interfacce che abbiamo scritto originariamente erano sostanzialmente più di 40)