アーキテクチャの階層化
1.階層的な意味
重要性最も重要なことは方便维护
、コードが階層化されていない場合、さまざまなパラメーター検証、さまざまなシナリオ判断、さまざまなデータクエリが異なる結果を返すなど、コードがコントローラーに書き込まれることです。これは非常に混乱し、問題が発生しにくいことです。要件の配置と変更は頭痛の種であり、優れた階層化アーキテクチャは問題を解決できます。
第二に、コードアーキテクチャ
ここでは、レッスンネットワークから先生の写真を借りて、もう一度描きました。コードを上記の5つのモジュールに分割しました。機能は次のとおりです。
モジュール | 効果 |
---|---|
コントローラ | ビジネスレイヤーを呼び出し、アセンブリデータをビューレイヤーまたはapiインターフェイスに返す責任があります |
ビジネスロジックレイヤー | データを取得するためにサードパーティのライブラリまたはモデルレイヤーを呼び出す責任があります |
基本ライブラリライブラリ | 特定の機能のカプセル化またはサードパーティライブラリの参照を担当するライブラリ |
モデルレイヤーモデル | データベースに接続してデータを返す責任があります |
レイヤービューを表示 | データをフォアグラウンドに戻す責任があります |
3つの共通レイヤーデザイン
一部のモジュールは複数のアプリケーションに共通であるため、
common
すべてのアプリケーションの共通ファイルを格納するディレクトリを作成できます。common
このディレクトリは、他のアプリケーションディレクトリと同じレベルにあります。ビジネス、ライブラリ、モデルなど。
注意:修改文件目录,记得修改文件命名空间和引用该文件的地方。
後で操作データをredis
待つ必要があるかもしれないことを考慮して、ここにmodel
階層化があります。
4、練習コード
モデル:
<?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();
}
}
ビジネス:
<?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;
}
}
コントローラ:
<?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);
}
}