Superposition d'architecture
1. Signification hiérarchique
Signification Je pense que le plus important est 方便维护
que si le code n'est pas en couches, il est écrit dans le contrôleur, y compris la vérification de divers paramètres, divers jugements de scénario et diverses requêtes de données retournent des résultats différents, ce qui est très déroutant et il est difficile d'avoir des problèmes. Le positionnement et la modification des exigences est un casse-tête, et une bonne architecture en couches peut résoudre les problèmes.
Deuxièmement, l'architecture du code
Ici, j'ai emprunté une photo d'un enseignant à un réseau de cours, et je l'ai redessinée. Nous avons divisé le code en 5 modules ci-dessus. Leurs fonctions sont:
Module | effet |
---|---|
Manette | Responsable de l'appel de la couche métier et du renvoi des données d'assemblage à la couche de vue ou à l'interface API |
Couche de logique métier | Responsable de l'appel des bibliothèques tierces ou de la couche de modèle pour obtenir des données |
Bibliothèque de base lib | Bibliothèques chargées d'encapsuler des fonctions spécifiques ou de référencer des bibliothèques tierces |
Modèle de couche modèle | Responsable de la connexion à la base de données pour renvoyer les données |
Afficher la vue des couches | Responsable du retour des données au premier plan |
Conception à trois couches communes
Certains modules sont communs à plusieurs applications, vous pouvez donc créer un
common
répertoire pour stocker tous les fichiers communs des applications,common
et le répertoire est au même niveau que les autres répertoires d'application. Tels que business, lib, model, etc.
注意:修改文件目录,记得修改文件命名空间和引用该文件的地方。
Étant donné que vous devrez peut-être redis
attendre les données d'opération plus tard , voici donc la model
superposition.
Quatre, code de pratique
Modèle:
<?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();
}
}
Affaires:
<?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;
}
}
manette:
<?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);
}
}