Capas de arquitectura
1. Significado jerárquico
Importancia Creo que lo más importante es 方便维护
que si el código no está en capas, está escrito en el controlador, incluida la verificación de varios parámetros, varios juicios de escenarios y varias consultas de datos que devuelven resultados diferentes, lo que es muy confuso y es difícil tener problemas. Colocar y modificar los requisitos es un dolor de cabeza, y una buena arquitectura en capas puede resolver las preocupaciones.
En segundo lugar, la arquitectura del código
Aquí tomé prestada una imagen de un maestro de una red de lecciones y la dibujé nuevamente. Dividimos el código en los 5 módulos anteriores. Sus funciones son:
Módulo | efecto |
---|---|
Controlador | Responsable de llamar a la capa empresarial y devolver los datos de ensamblaje a la capa de vista o la interfaz api |
Capa de lógica empresarial | Responsable de llamar a bibliotecas de terceros o capa de modelo para obtener datos |
Biblioteca básica lib | Bibliotecas responsables de encapsular funciones específicas o hacer referencia a bibliotecas de terceros |
Modelo de capa de modelo | Responsable de conectarse a la base de datos para devolver datos |
Ver vista de capa | Responsable de devolver los datos al primer plano |
Diseño de tres capas comunes
Algunos módulos son comunes a varias aplicaciones, por lo que puede crear un
common
directorio para almacenar todos los archivos comunes de las aplicaciones,common
y el directorio está al mismo nivel que otros directorios de aplicaciones. Como negocio, biblioteca, modelo, etc.
注意:修改文件目录,记得修改文件命名空间和引用该文件的地方。
Teniendo en cuenta que es posible que deba redis
esperar los datos de la operación más tarde , aquí están las model
capas.
Cuatro, código de práctica
Modelo:
<?php
namespace app\common\model\mysql;
use think\Model;
class Demo extends Model
{
public function getDemoDataByCategoryId($cateId, $limit = 10){
return $this->where("cate_id", $cateId)->limit($limit)->select()->toArray();
}
}
Negocio:
<?php
namespace app\common\business;
use app\common\model\mysql\Demo as DemoModel;
class Demo
{
public function getDemoDataByCategoryId($cateId, $limit = 10){
$model = new DemoModel();
$results = $model->getDemoDataByCategoryId($cateId, $limit);
if(empty($results)){
return [];
}
return $results;
}
}
controlador:
<?php
namespace app\demo\controller;
use app\BaseController;
use app\common\business\Demo;
class Index extends BaseController
{
public function test(){
$cateId = $this->request->param("cate_id",0,"intval");
if(empty($cateId)){
return show(config("status.error"), "参数错误");
}
$demo = new Demo();
$results = $demo->getDemoDataByCategoryId($cateId);
return show(config("status.success"), "ok", $results);
}
}