Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Tabla de contenido
Tabla de contenido
1. Especificaciones del proyecto:
(2) Objeto de datos transmitidos
2. Especificaciones del código:
(1) Convención de nomenclatura de bases de datos:
(2) Especificaciones de anotación:
(3) Especificaciones de denominación:
(4) Especificaciones de front-end y back-end:
(2) Crea un nuevo proyecto e invita a tus compañeros de equipo:
(3) Redacción de especificaciones para documentos de interfaz.
4. Función de depuración (debe conocer el backend)
(¡¡¡Una sola persona no puede dominar el país!!!)
Los específicos son:
(1) Capa de entidad: la capa de entidad almacena entidades de objetos específicos, correspondientes a los objetos en la base de datos.
(2) Capa DAO: (se puede subdividir en dos capas (capa de interfaz de dao y capa de implementación de dao)) es la capa que interactúa con la base de datos, lo que implica algunas operaciones de adición, eliminación, modificación y consulta de la base de datos.
(3) Capa de servicio (se puede subdividir en dos capas (capa de interfaz de servicio y capa de implementación de servicio)): principal responsable del diseño de aplicaciones lógicas de los módulos comerciales.
(4) Capa de controlador: la capa de controlador es responsable del control de procesos específicos del módulo de negocios. La capa de controlador es responsable de la interacción de front-end y back-end, acepta solicitudes de front-end, llama a la capa de servicio y recibe datos devueltos por. la capa de servicio y, finalmente, devolver páginas y datos específicos al cliente.
(5) Capa de utilidad: la capa de herramientas coloca clases de herramientas de uso común. Por ejemplo, algunos métodos comunes se pueden escribir como funciones de utilidad y luego se puede simplificar el código general.
(6) Capa de excepción: puede escribir una capa de excepción de retorno unificada.
(7) Capa de filtro: capa de filtro, como filtrar uniformemente la autenticación de identidad. Si el filtro no pasa, solo estará en modo invitado.
DTO es la estructura de datos enviada por la solicitud de front-end.
VO es la respuesta devuelta por el backend en respuesta a la solicitud enviada por el frontend.
PO es la correspondencia real entre la entidad objeto y la tabla de objetos de la base de datos.
BO es la entidad objeto en el proceso de procesamiento empresarial.
Nómbrelo en inglés, no en pinyin chino.
Sea fácil de entender, no sofisticado.
Utilice nombres de jorobas en lugar de nombres comunes.
Utilice saltos de línea a intervalos y no escriba párrafos largos.
Sea anotado, no individualista.
¡No utilice palabras clave, palabras reservadas, etc. que tengan significados especiales en el propio Java! ! !
(1) El nombre de la tabla es único y varios nombres de tablas no pueden usar el mismo nombre.
(2) El nombre de la tabla debe ser una combinación de letras minúsculas y guiones bajos. Intente evitar el uso de letras mayúsculas o caracteres especiales. Utilice "user_info" como este, o "tbl_user" o "tbl_user_info".
(3) No entre en conflicto con las palabras clave,Para deshabilitar palabras reservadas, como me gusta, desc, rango, coincidencia, retrasado, etc., consulte las palabras reservadas oficiales de MySQL.
(4) Nombre del campo de la base de datos: consta de 26 letras en inglés (distingue entre mayúsculas y minúsculas) más el guión bajo '_', como "user_id", "user_name", "user_password", "user_register_time", "user_login_time".
(5) Especificaciones de clave primaria y externa:
Clave principal: pk_+nombre de tabla
Por ejemplo:pk_main
Clave externa: fk_+nombre de la tabla esclava+_+nombre de la tabla principal
Por ejemplo:fk_sub_main
(1) Anotación de clase:
Las anotaciones de clase (Class) se utilizan principalmente para declarar para qué se utiliza la clase, así como cierta información como el creador, la fecha de creación, la versión, el nombre del paquete, etc.:
/**
* @versión: V1.0
* @autor: fendo
* @className: usuario
* @packageName: usuario
* @description: Esta es la clase de usuario
* @datos: 01-07-2024 12:20
**/
(2) Anotación del método (Constructor):
/**
* @autor: fendo
* @methodsName: agregarUsuario
* @description: Agregar un usuario
* @param: xxx
* @return: Cadena
* @lanza:
*/
(3) Comentarios del bloque de código: explique el propósito de una determinada parte de su código
/**
* Crear una instancia de un usuario
* xxxxxxx
*/
Usuario usuario=nuevo Usuario();
(4) Comentarios de una sola frase: comenta tu código individual
Usuario usuario=nuevo Usuario(); //Crear una instancia de un usuario
Nómbrelo para que otros puedan entenderlo, nómbrelo en mayúsculas y minúsculas y distinga entre mayúsculas y minúsculas.
Por ejemplo: UserController, FileController, BookService
Por ejemplo: getUserName(), userLogin(), getMessage();
Por ejemplo: MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
1) El método para obtener un solo objeto tiene el prefijo get.2) Los métodos para obtener múltiples objetos tienen el prefijo lista y terminan en plural, como por ejemplo: listObjects3) El método para obtener valores estadísticos tiene el prefijo recuento.4) El método de inserción tiene el prefijo guardar/insertar.5) El método de eliminación tiene el prefijo eliminar/eliminar.6) El método modificado tiene el prefijo actualización.
1) Objeto de datos: xxxDO, xxx es el nombre de la tabla de datos.2) Objeto de transferencia de datos: xxxDTO, xxx es el nombre relacionado con el campo comercial.3) Objeto de visualización: xxxVO, xxx es generalmente el nombre de la página web.
Este es un gran problema cuando se utilizan objetos existentes. Se recomienda utilizar el método igual para juzgar.
Ejemplo positivo:(1) Especifique un rango de error. Si la diferencia entre dos números de coma flotante está dentro de este rango, se consideran iguales.flotar a = 1.0F - 0,9 °F ;flotar b = 0,9 °F - 0,8 °F ;flotar diferencia = 1.ª edición-6.º aniversario ;si ( Matemáticas . abdominales ( a - b ) < diferencia ) {Sistema . afuera . imprimirln ( "verdadero" );}(2) Utilice BigDecimal para definir el valor y luego realice operaciones con números de punto flotante.Decimal grande a = nuevo Gran decimal ( "1.0" );Decimal grande b = nuevo Gran decimal ( "0.9" );Decimal grande c = nuevo Gran decimal ( "0.8" );Gran decimal x = a . sustraer ( b );BigDecimal y = b . sustraer ( C );si ( X . comparar con ( y ) == 0) {Sistema . afuera . imprimirln ( "verdadero" );}
tipo de identificador | reglas de nomenclatura | ejemplo |
Paquetes | El prefijo de un nombre de paquete único siempre son letras ASCII minúsculas y es un nombre de dominio de nivel superior, generalmente com, edu, gov, mil, net, org o el código de dos caracteres en inglés que identifica el país especificado por la Ley de 1981. Norma ISO 3166. Las partes siguientes del nombre del paquete varían según las convenciones de nomenclatura internas de diferentes organizaciones. Estas convenciones de nomenclatura pueden utilizar la composición de nombres de directorios específicos para distinguir departamentos, proyectos, máquinas o nombres de inicio de sesión. | com.sun.eng com.apple.quicktime.v2 edu.cmu.cs.bovik.queso |
Clases | Reglas de nomenclatura: el nombre de la clase es un sustantivo, que utiliza mayúsculas y minúsculas, con la primera letra de cada palabra en mayúscula. Intente que los nombres de sus clases sean concisos y descriptivos. Utilice palabras completas, evite abreviaturas (a menos que la abreviatura se utilice más ampliamente, como URL, HTML) | clase Raster; clase ImageSprite; |
Interfaces | Reglas de nomenclatura: las reglas de casos son similares a los nombres de clases | interfaz RasterDelegate; Interfaz de almacenamiento; |
Métodos | El nombre del método es un verbo, en mayúsculas y minúsculas, con la primera letra de la primera palabra en minúscula y la primera letra de las palabras siguientes en mayúscula.Nomenclatura de casos de camellos | correr(); corre rapido(); obtenerFondo(); |
variables | A excepción de los nombres de variables, todas las instancias, incluidas las clases y las constantes de clase, están en mayúsculas y minúsculas, con la primera letra de la primera palabra en minúscula y la primera letra de las palabras siguientes en mayúscula. Los nombres de variables no deben comenzar con un guión bajo o un signo de dólar, aunque esto está permitido sintácticamente. Los nombres de las variables deben ser breves y descriptivos. Los nombres de las variables deben elegirse para que sean fáciles de recordar, es decir, que indiquen su propósito. | Lista<User> Lista de usuarios; Cadena nombreUsuario; |
Constantes | Las declaraciones de constantes de clase y constantes ANSI deben estar en letras mayúsculas, con las palabras separadas por guiones bajos. (Trate de evitar las constantes ANSI, que pueden causar errores fácilmente) | int final estático MIN_WIDTH = 4; int final estático MAX_WIDTH = 999; int final estático OBTENER_LA_CPU = 1; |
a) OBTENER: Obtener recursos del servidor. (puede verse como una operación selecta)b) POST: Crea un nuevo recurso en el servidor. (puede considerarse como una operación de inserción)c) PUT: Actualiza los recursos en el servidor. (puede verse como una operación de actualización)d) ELIMINAR: Elimina recursos del servidor. (puede considerarse como una operación de eliminación)
code
:código de estado http message
: Información de descripción del texto correspondiente 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 estado de respuesta
Error:
Éxito 2XX
200 ok (solicitud exitosa)
204 sin contenido (la solicitud fue exitosa, pero no se devolvió ningún resultado)
206 contenido parcial (el cliente solicita una parte del recurso, el servidor responde con éxito y devuelve una variedad de recursos)
redirección 3XX
Movimiento 301 permanentemente (redireccionamiento permanente)
302 encontrado (redireccionamiento temporal)
303 ver otro (indica que debido a que hay otro URI para el recurso correspondiente a la solicitud, se debe usar GET
Método dirigido a obtener el recurso solicitado)
304 no modificado (indica que cuando el cliente usa acceso condicional a un recurso, el servidor encuentra el recurso, pero las condiciones de la solicitud no cumplen con las condiciones. No tiene nada que ver con la redirección)
Redirección temporal 307 (mismo significado que 302)
error de cliente 4XX
400 solicitud incorrecta (hay un error de sintaxis en el mensaje de solicitud)
401 no autorizado (requiere autenticación (primera devolución) o autenticación fallida (segunda devolución))
403 prohibido (la solicitud fue rechazada por el servidor)
404 no encontrado (el recurso solicitado no se puede encontrar en el servidor)
error del servidor 5XX
Error interno del servidor 500 (se produjo un error cuando el servidor ejecutó la solicitud)
Servicio 503 no disponible (el servidor está sobrecargado o inactivo por mantenimiento y no puede manejar la solicitud)
ilustrar: El límite predeterminado de nginx es 1 MB y el límite predeterminado de tomcat es 2 MB. Cuando existe una necesidad comercial de transferir contenido más grande, puede aumentar el límite del lado del servidor.
ilustrar: Después de que la declaración de retorno en el bloque try se ejecuta con éxito, no regresa inmediatamente, pero continúa ejecutando la declaración en el bloque finalmente. Si hay una declaración de retorno aquí, regresará directamente aquí, descartando sin piedad el punto de retorno en el. prueba bloquear.
Enlace: haga clic en el enlace para descargar apifox directamente (simplemente descargue la última versión). Apifox: una plataforma de colaboración integrada para documentación, depuración, simulación y pruebas de API. Tiene funciones como gestión de documentos de interfaz, depuración de interfaz, pruebas simuladas y automatizadas, y la eficiencia del desarrollo, las pruebas y la depuración conjunta de la interfaz aumenta 10 veces. La mejor herramienta de gestión de documentos de interfaz y herramienta de prueba de automatización de interfaz.https://apifox.com/
1. Crea tu equipo y crea un nuevo proyecto:
Invita a tus compañeros de equipo
2. Cree una nueva interfaz y un nuevo modelo de datos:
(1) Determine cuál es la solicitud (POST, GET, PUT, DELETE):
(2) El entorno de prueba debe estar unificado y las URL en diferentes entornos son diferentes:
(3) Los parámetros de solicitud están configurados:
¿Qué parámetros están configurados? Proporcione ejemplos de parámetros, nombres chinos y descripciones de parámetros.
(4) La respuesta debe configurarse:
Por ejemplo, es necesario especificar qué tipo de información se devuelve en diferentes estados, y debe haber ejemplos de éxito y ejemplos de excepción (para conveniencia de la interfaz).
- {
- "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) Se puede crear un modelo de datos:
Puede crear varios modelos de datos, lo cual es muy conveniente para devolver campos de respuesta y también conveniente para que el front-end vea sus campos de datos.
Las especificaciones de escritura y detalles específicos de apifox.
Inicio rápido de Apifox | Documentación de ayuda de Apifoxhttps://apifox.com/ayuda/
(1) Debe haber una introducción al comienzo del documento de la interfaz API. Esta sección puede incluir lo siguiente:
El propósito de esta parte es permitir que los lectores comprendan la situación básica y la información general de la interfaz API.
(2) Lista de interfaces
A continuación, en el documento de la interfaz API, debemos enumerar todas las interfaces. Cada interfaz debe contener la siguiente información:
El propósito de esta sección es permitir a los lectores comprender rápidamente la información básica de cada interfaz y utilizar las interfaces correctamente según los ejemplos del documento.
(3) Descripción de los parámetros de solicitud y parámetros de respuesta
Después de la lista de interfaces, debemos detallar los parámetros de solicitud y los parámetros de respuesta para cada interfaz. Esta sección debe incluir la siguiente información:
Para los tipos y formatos de parámetros, puede utilizar tipos y formatos de datos estándar, o puede definir sus propios tipos y formatos de datos según circunstancias específicas. Si es necesario determinar los valores requeridos y predeterminados en función de la situación real.
(4) Descripción del código de error
Cuando se utiliza la interfaz API, a veces se produce un error. En este caso, es necesario devolver un código de error para explicar el tipo y la causa del error. Por lo tanto, en la documentación de la interfaz API, debemos especificar todos los códigos de error posibles. Esta sección debe incluir la siguiente información:
El propósito de esta sección es que el lector comprenda todos los posibles tipos de errores y causas, y que pueda manejar los errores correctamente basándose en los ejemplos de la documentación.
(1) Operaciones específicas:
Definir una clase de prueba
sugerencia:
Nombre de la clase de prueba: Nombre de la clase probada Prueba CalculadoraPrueba
Nombre del paquete: xx.xx.xx.test cn.itcast.test
Definir métodos de prueba: se puede ejecutar de forma independiente
sugerencia:
Nombre del método: nombre del método de prueba testAdd()
Valor de retorno: nulo
Lista de parámetros: parámetros vacíos
Agregue @Test al método
Importar entorno de dependencia Junit
resultado del juicio:
Rojo: fallido
verde: éxito
Generalmente usamos el método estático afirmarEquals (esperado, real) en la clase Assert para manejar nuestros resultados esperados y generar resultados.
Afirmar.assertEquals(3, resultado);
Los dos parámetros son: valor esperado valor del resultado del programa
¿Por qué utilizar Assert.assertEquals (esperado, real) para procesar los resultados de las pruebas?
Porque estipulamos que el rojo representa el fracaso y el verde la corrección. Cuando usamos un método de prueba para probar el método de suma de una computadora, solo generamos este resultado (suponiendo que no ocurra ninguna excepción). Si ingresamos 1 y 3, esperamos obtener el resultado 4, pero lo que obtenemos es 2 y lo que esperamos obtener es 4. El resultado obtenido en este momento no cumple con nuestras expectativas, pero el resultado en ejecución aún está en verde. (que representa correcto), ¿no es correcto? En este momento, podemos usar el método afirmarEquals de Assert al final para comparar el valor esperado y el valor resultante generado por el programa. Si son iguales, será verde. si no son iguales, será rojo. ¿Cumple esta vez nuestra definición de verde y rojo?
- 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
Agregue @Before antes de un método de prueba y se convertirá en un método de inicialización. Este método se ejecutará automáticamente antes de que se ejecuten todos los métodos de prueba. Generalmente se usa para la aplicación de recursos.
@Después
Agregue @After antes de un método de prueba y se convertirá en un método de liberación de recursos, que se ejecutará automáticamente después de que se ejecuten todos los métodos de prueba.
El método decorado con @Before se ejecutará antes de que se ejecute el método de prueba.
El método decorado con @After se ejecutará después de que se ejecute el método de prueba.
Los métodos modificados con @Before o @After se ejecutarán independientemente de si ocurre el método de prueba.
(2) Generar automáticamente complementos de clase de prueba
(1) Al escribir el documento de la interfaz en la parte posterior, debe escribirse de manera clara y clara para que su interfaz pueda entenderlo. Debe estar escrito de manera estandarizada, no para que usted mismo pueda entenderlo. El nombre reescrito y la respuesta de la interfaz del valor predeterminado deben estar bien escritos.
(2) Además de lo que se enseña, puede aprender algunas otras cosas usted mismo, como el registro de verificación por correo electrónico, el inicio de sesión con código de verificación, c3p0, cifrado MD5, registros de registro, estilo de resultado, etc.
(3) La escritura del código también debe estar estandarizada y la lógica debe ser rigurosa (cookie, sesión); donde se necesita un juicio vacío, se debe hacer un juicio vacío y donde se puede aumentar la seguridad, se puede aprender de ello;
(4) El front-end y el back-end deben cooperar bien. No permita que el back-end simplemente haga lo suyo sin decirle una palabra al front-end. La respuesta interactiva del front-end y back-end también es parte de la evaluación, lo que representa una gran parte de la interfaz que escribió no solo se puede ejecutar a través de apifox. ¿Hay algún error cuando se presenta en la página de front-end específica? ¿Hay algún problema lógico, etc. que podría ser necesario considerar?
(5) Durante el análisis de la demanda, estipule las funciones e interfaces que desea realizar. Si ha realizado algunas funciones pero el front-end no las ha realizado, puede impulsarlas si las cosas que han hecho requieren su back-end. interfaces/datos, si no escribiste, reflexiona cuidadosamente y comunícate más.
Puede comparar proyectos que realmente funcionan o algo similar, como un sitio web de compras. Luego, debe comparar con Taobao las interfaces de back-end que puede tener este sitio web, los módulos funcionales que puede tener y los detalles específicos.
(6) No busque más ciegamente, sea lógico y razonable y aprenda a simplificar las partes que se pueden simplificar. Pero también se debe garantizar el número básico de interfaces y el volumen de código. (Las interfaces que escribimos originalmente eran básicamente más de 40)