现在的框架基本是mvc模式了,比如thinkphp,ci,yii框架等等
由于项目做大,逻辑复杂之后,简单的mvc模式已经不能满足需求,总有那么几个model在不断的变大膨胀,这些model之间产生了网状的相互依赖关系。维护起来比较麻烦。
于是我们就需要把这个或者这些膨胀了的model解耦出来。
于是我们考虑增加一个逻辑层Logic.
首先,我们有一个已经安装好的yii项目。没有安装的可以参考我之前写的yii2 高级模版安装
安装完成之后
主要有以下几个目录
backend
common
console
frontend
vedor
我们在comom目录下新增一个文件夹logic,形成common\logic\ 这样的目录结构。
我们要让他形成这样的调用controller->logic->model,controller不再直接调用model,由logic去调用model.
假设我们有一个ArticleController.php,一个ArticleLogic.php,一个模型Article.php
顾名思义。
控制器层ArticleController.php
1 <?php 2 namespace frontend\controllers; 3 4 use Yii; 5 use yii\base\InvalidParamException; 6 use yii\web\BadRequestHttpException; 7 use yii\web\Controller; 8 9 use common\logic\ArticleLogic; 10 11 12 /** 13 * article controller 14 */ 15 class ArticleController extends Controller 16 { 17 /** 18 * http://yii_advanced_app_2_0_9.me/index.php?r=article/get_article_info&article_id=30 19 * 获取信息 20 */ 21 public function actionGet_article_info() 22 { 23 $condition[‘id‘]=Yii::$app->request->get(‘article_id‘); 24 25 $article_logic=new \common\logic\ArticleLogic(); 26 $get_article_info_result=$article_logic->get_article_info($condition); 27 28 print_r($get_article_info_result);die(); 29 30 } 31 }
逻辑层ArticleLogic.php
<?php /** * 文章 * @author Yoper [email protected] * http://www.linglingtang.com * */ namespace common\logic; use Yii; /** * article Logic */ class ArticleLogic extends YoxbaseLogic { private $article_model=null; public function __construct() { parent::__construct(); $this->article_model=new \common\models\Article(); } /** * 获取文章信息 * @param array $condition * @return multitype:number unknown */ public function get_article_info($condition) { $result = array(‘status‘=>0); $get_article_info_result = $this->article_model->get_article_info($condition); if($get_article_info_result[‘status‘]<1) { $result[‘message‘]=$get_article_info_result[‘message‘]; return $result; } $result[‘status‘]=1; $result[‘data‘]=$get_article_info_result[‘data‘]; return $result; } }
模型层Article.php
<?php /** * 文章 * @author Yoper [email protected] * http://www.linglingtang.com * */ namespace common\models; use Yii; use yii\base\NotSupportedException; use yii\behaviors\TimestampBehavior; use yii\db\ActiveRecord; /** * Article model * */ class Article extends ActiveRecord { /** * @inheritdoc */ public static function tableName() { return ‘{{%article}}‘; } /** * @inheritdoc */ public function behaviors() { return [ TimestampBehavior::className(), ]; } /** * @inheritdoc */ public function rules() { return [ [‘status‘, ‘default‘, ‘value‘ => self::STATUS_ACTIVE], [‘status‘, ‘in‘, ‘range‘ => [self::STATUS_ACTIVE, self::STATUS_DELETED]], ]; } public function get_article_info($condition) { $result = array(‘status‘=>0); $info=$this->find()->where($condition)->one()->attributes; $result[‘status‘]=1; $result[‘message‘]=‘获取成功‘; $result[‘data‘]=$info; return $result; } }
这样,我们就可以成功调用数据了。
如图,简单的打印,丑,但是有内涵~
增加逻辑层大功告成。
Yoper
2016.10.06
时间: 2024-10-10 16:56:30