Estilo de codificación: entorno SSM en modo Mvc, gestión por capas de código

Código fuente de este artículo: GitHub · haga clic aquí || GitEE · haga clic aquí

1. Estrategia de estratificación

Estrategia de capas de código y patrón MVC. El nombre completo de MVC es ModelViewController, que es model-view-controller. Como modelo de diseño de software, organiza el código de manera que separa la lógica empresarial, los datos y la visualización de la interfaz, y reúne la lógica empresarial en una En el componente, mientras se mejora y personaliza la interfaz y la interacción del usuario, no es necesario volver a escribir la lógica empresarial. Este es un modo de desarrollo, pero no es un modo en capas del código en el desarrollo real. Por lo general, el código de back-end del marco SSM se divide en Las capas son las siguientes:

Estilo de codificación: entorno SSM en modo Mvc, gestión por capas de código

  • Capa de control del controlador: defina la interfaz del servidor, los parámetros de entrada y salida y verifique algunos parámetros de entrada;
  • capa de servicios de negocios de servicios: ensamblaje de la lógica comercial, verificación comercial y construcción del modelo de parámetros requerido por la capa de control;
  • capa de interacción de datos dao: proporciona métodos de consulta de datos requeridos por la capa de servicio y lógica de proceso relacionada con las condiciones de interacción de datos;
  • Capa de persistencia de mapeador: basada en el soporte nativo requerido por el marco mybatis, un componente de capa de persistencia muy utilizado;

En segundo lugar, la capa de control

1. Estilo de interfaz de descanso

Según la lógica del acceso y procesamiento de recursos, se utilizan diferentes estilos de anotaciones. Por ejemplo, adición, actualización, consulta, eliminación de recursos.

/**
 * 新增
 */
@PostMapping("/insert")
public Integer insert (@RequestBody BaseInfo baseInfo){
    return baseInfoService.insert(baseInfo);
}
/**
 * 更新
 */
@PutMapping("/update/{id}")
public String update(@PathVariable(value = "id") Integer id,
                     @RequestBody BaseInfo baseInfo) {
    if (id<1){
        return "error";
    }
    baseInfo.setId(id);
    return "update="+baseInfoService.update(baseInfo);
}
/**
 * 主键查询
 */
@GetMapping("/detail/{id}")
public InfoModel detail(@PathVariable(value = "id") Integer id) {
    return baseInfoService.detail(id) ;
}
/**
 * 主键删除
 */
@DeleteMapping("/delete/{id}")
public String delete(@PathVariable(value = "id") Integer id) {
    baseInfoService.delete(id) ;
    return "SUS" ;
}

2. Reutilización de la interfaz

No se recomienda que la interfaz se reutilice mucho. Por ejemplo, agregar, eliminar, modificar y verificar cada interfaz es suficiente. El principio básico es que las diferentes operaciones del cliente son independientes de la interfaz.

/**
 * 列表加载
 */
@GetMapping("/list")
public List<BaseInfo> list() {
    return baseInfoService.list(new BaseInfoExample()) ;
}
/**
 * 列表搜索
 */
@PostMapping("/search")
public List<BaseInfo> search (@RequestParam("userName") String userName,
                              @RequestParam("phone") String phone) {
    return baseInfoService.search(userName,phone) ;
}

Por ejemplo, la interfaz de lista común, la lista generalmente tiene un mecanismo de búsqueda que se cargará según las condiciones, y las condiciones de juicio para la búsqueda son muy complicadas. Se recomienda dividir en dos interfaces. Por consideraciones prácticas, la mayoría de los escenarios solo usan la interfaz de lista y rara vez Utilice la búsqueda para buscar.

3. Entrada y salida

Verificar las condiciones necesarias del cliente, como que se requieran ciertas condiciones, etc. Si hay algún problema, bloquee rápidamente el enlace de solicitud, para que la capa de control de entrada del programa intercepte la devolución.

@PutMapping("/update/{id}")
public String update(@PathVariable(value = "id") Integer id,
                     @RequestBody BaseInfo baseInfo) {
    if (id<1){
        return "error";
    }
    baseInfo.setId(id);
    return "update="+baseInfoService.update(baseInfo);
}

Si los parámetros son menos de tres, puede mostrarlos directamente. Si los parámetros son tres o más, puede usar la clase de entidad para encapsularlos.

@PostMapping("/search")
public List<BaseInfo> search (@RequestParam("userName") String userName,
                              @RequestParam("phone") String phone) {
    return baseInfoService.search(userName,phone) ;
}

4. Procesamiento de parámetros

El principio básico del grado de procesamiento del formato de parámetro es que el servidor es un recurso público para evitar operaciones innecesarias. Por ejemplo, el cliente puede determinar si el valor de retorno es vacío, nulo, etc., o manejar algunos formatos comunes, y usar al cliente para compartir adecuadamente la presión del servidor.

Tres, capa de servicios empresariales

1. Verificación comercial

Por ejemplo, la capa de base de datos consulta el número de pedido entrante y no hay datos de pedido. Esto se denomina una excepción de naturaleza comercial. No hay ningún problema con el código en sí, pero la lógica comercial no se puede ejecutar normalmente.

public InfoModel detail(Integer id){
    BaseInfo baseInfo = baseInfoDao.selectByPrimaryKey(id) ;
    if (baseInfo != null){
        DetailInfoEntity detailInfoEntity = detailInfoDao.getById(id);
        if (detailInfoEntity == null){
            LOG.info("id="+id+"数据缺失 DetailInfo");
        }
        return buildModel(baseInfo,detailInfoEntity) ;
    }
    LOG.info("id="+id+"数据完全缺失");
    return null ;
}

2. Ensamblar la lógica empresarial

Normalmente, la capa de servicio es una pieza lógica compleja que se utiliza para empalmar los pasos centrales del negocio. La lógica del negocio se puede juzgar y el programa se puede ejecutar paso a paso, evitando una gran cantidad de posibles consultas de creación de objetos y datos de demanda en la entrada del programa.

public int insert (BaseInfo record){
    record.setCreateTime(new Date());
    int insertFlag = baseInfoDao.insert(record);
    if (insertFlag > 0){
        DetailInfoEntity detailInfoEntity = new DetailInfoEntity();
        detailInfoEntity.setUserId(record.getId());
        detailInfoEntity.setCreateTime(record.getCreateTime());
        if(detailInfoDao.save(detailInfoEntity)){
            return insertFlag ;
        }
    }
    return insertFlag;
}

3. Construcción de modelos de datos

Por lo general, la capa empresarial es un poco complicada. Si desea comprender rápidamente la capa empresarial, puede proporcionar un método para volver al método empresarial complejo para procesar los parámetros que la capa de servicio necesita para volver a la capa de control, de modo que El método de la capa de servicio pesado se vuelve más claro.

private InfoModel buildModel (BaseInfo baseInfo,DetailInfoEntity detailInfo){
    InfoModel infoModel = new InfoModel() ;
    infoModel.setBaseInfo(baseInfo);
    infoModel.setDetailInfoEntity(detailInfo);
    return infoModel ;
}

Cuarto, la capa de interacción de datos

1. Ingeniería inversa

Aquí para usar mybatis framework o mybatis-plus framework como referencia. Si es el marco mybatis, se recomienda que el código de plantilla de la ingeniería inversa no esté personalizado. Si necesita personalizar el método, personalice un archivo de extensión a nivel de mapeador y xml para almacenar el método personalizado y la lógica SQL, para evitar tablas. Fuerte malestar causado por cambios estructurales importantes.

Estilo de codificación: entorno SSM en modo Mvc, gestión por capas de código

Por supuesto, la mayoría de ellos ahora usan mybatis-plus como componente de la capa de persistencia, lo que puede evitar los problemas anteriores.

2. Interacción de datos

En respuesta a las necesidades de la capa empresarial, proporcionar los métodos de consulta de datos correspondientes, procesar únicamente la lógica de interacción con la base de datos y evitar la lógica empresarial, especialmente en la arquitectura distribuida, la consulta de datos y el ensamblaje de diferentes servicios no deben aparecer en esta capa.

public interface BaseInfoDao {

    int insert(BaseInfo record);

    List<BaseInfo> selectByExample(BaseInfoExample example);

    int updateByPrimaryKey(BaseInfo record);

    BaseInfo selectByPrimaryKey(Integer id);

    int deleteByPrimaryKey(Integer id);

    BaseInfo getById (Integer id) ;
}

Cinco, dirección de código fuente

GitHub·地址
https://github.com/cicadasmile/data-manage-parent
GitEE·地址
https://gitee.com/cicadasmile/data-manage-parent

Lectura recomendada: sistema de programación de acabado

Número de serie nombre del proyecto Dirección de GitHub Dirección GitEE Recomendado
01 Java describe patrones de diseño, algoritmos y estructuras de datos GitHub · haga clic aquí GitEE · Haga clic aquí ☆☆☆☆☆
02 Fundamentos Java, concurrencia, orientado a objetos, desarrollo web GitHub · haga clic aquí GitEE · Haga clic aquí ☆☆☆☆
03 Explicación detallada del caso del componente básico del microservicio SpringCloud GitHub · haga clic aquí GitEE · Haga clic aquí ☆☆☆
04 Caso completo de combate real de arquitectura de microservicio SpringCloud GitHub · haga clic aquí GitEE · Haga clic aquí ☆☆☆☆☆
05 Comenzando con la aplicación básica de SpringBoot framework a avanzada GitHub · haga clic aquí GitEE · Haga clic aquí ☆☆☆☆
06 SpringBoot framework integra y desarrolla middleware común GitHub · haga clic aquí GitEE · Haga clic aquí ☆☆☆☆☆
07 Caso básico de gestión de datos, distribución, diseño de arquitectura GitHub · haga clic aquí GitEE · Haga clic aquí ☆☆☆☆☆
08 Grandes series de datos, almacenamiento, componentes, informática y otros marcos GitHub · haga clic aquí GitEE · Haga clic aquí ☆☆☆☆☆

Supongo que te gusta

Origin blog.51cto.com/14439672/2548589
Recomendado
Clasificación