yii2 增加逻辑层

现在的框架基本是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

yii2 增加逻辑层的相关文章

业务逻辑层缓存应该设计

在业务制定的时候很少会切入缓存设计这一环节,毕竟在指标不明确的情况这属于一种过渡设计.毕竟缓存切入有很多手段,在很多时候直接在WEB进行一个页面缓存就有着非常高收益的效果.缓存是一种横向的数据处理应用,一般在设计中引入AOP,ICO的应用组件都可以在后期切入添加.但AOP,ICO在没有比较丰富的经验情况引入会直接增加应用的复杂度和风险.在设计主要介绍一种简单的设计方式在设计阶段引用缓存但又不带来复杂的工作成本. 一个简单示例 public class BlogService:Interfaces

JavaEE使用三层架构(显示层、业务逻辑层、数据访问层)实现数据的增删改查

实例: 1.功能描述 实现一个简易新闻发布系统,包括查看.添加.修改和删除新闻等基本功能 2.具体要求 (1) 创建数据库 newssystem,创建表 news,要求如下: (2) 程序运行时,显示'发布新闻'页面(如图 1),输入相关内容,单击'提交'按钮,将新闻内容添加到数据库 (3) 单击图 1 中的'查看'按钮,显示'查看新闻'页面(如图 2),增加'修改'和'删除'链接 (4) 单击图 2 中的'update'链接,显示'修改新闻'页面(如图 3),修改后单击'修改'按钮确认,单击'

系统架构师-基础到企业应用架构-业务逻辑层

一.上章回顾 上章我们主要讲述了系统设计规范与原则中的具体原则与规范及如何实现满足规范的设计,我们也讲述了通过分离功能点的方式来实现,而在软件开发过程中的具 体实现方式简单的分为面向过程与面向对象的开发方式,而目前更多的是面向对象的开发设计方式.并且我们也讲述了该如何通过设计手段去分析功能点及设计分离 点,应该如何在设计的过程中分析的角度及如何去满足设计规范与原则.首先我们通过下图来回顾下上章要点: 二.摘要 本文将已架构的方式去分析分层结构中的业务层的设计,如何写出来内聚度,高耦合的业务逻辑层

架构设计-业务逻辑层简述

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 业务逻辑层是专门处理软件业务需求的一层,处于数据库之上,服务层之下,完成一些列对Domain Object的CRUD,作为一组微服务提供给服务层来组织在暴露给表现层,如库存检查,用法合法性检查,订单创建. 业务逻辑层包含领域对象模型,领域实体,业务规则,验证规则,业务流程.1:领域对象模型为系统结构描述,包含实体功能描述,实体之间的关系.领域模型处于天生的复杂性:2:领域实体:业务层是一些操

小程序视图层(xx.xml)和逻辑层(xx.js)

整个系统分为两块视图层(View)和逻辑层(App Service) 框架可以让数据与视图非常简单地保持同步.当做数据修改的时候,只需要在逻辑层修改数据,视图层就会做相应的更新. 通过这个简单的例子来看: <!-- This is our View --> <view> Hello {{name}}! </view> <button bindtap="changeName"> Click me! </button> // Th

从零开始编写自己的C#框架(12)——T4模板在逻辑层中的应用(一)(附源码)

对于T4模板很多朋友都不太熟悉,它在项目开发中,会帮我们减轻很大的工作量,提升我们的开发效率,减少出错概率.所以学好T4模板的应用,对于开发人员来说是非常重要的. 园子里对于T4模板的介绍与资料已经太多了,所以在这里我就不再详细讲述基础知识了,只是说说T4模板在本框架中的具体应用与实践. 一.创建逻辑层项目 二.添加引用 将之前添加的三个项目添加到引用 三.创建T4模板放置的文件夹,并命名为SubSonic 四.将Solution.DataAccess项目中SubSonic文件夹下的Multip

一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构

表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的DAO层就是将访问数据库的代码,数据库层是数据存储与管理的代码 O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO. VO,值对象

PHP业务逻辑层和数据访问层设计

以下还是觉得有点抽象 1.面向对象能给我们什么? 进行分析之前,我们先来复习一下面向对象.对象是要进行研究的任何事物.类是具有相同或相似性质的对象的抽象.面向对象的要素:封装.继承.多态.面向对象目的是:如何分配职责. 面向对象设计原则: 单一职责原则 (SRP) 一个类,只有一个引起它变化的原因. 开放-封闭原则 (OCP)(对外)可扩展,(对内)不可修改. 李氏替换原则 (LSP) 子类型必须能够完全替换其父类型. 依赖倒置原则 (DIP) 要依赖于抽象,不要依赖于具体. 接口隔离原则 (I

Python开发入门与实战12-业务逻辑层

12. Biz业务层 前面的章节我们把大量的业务函数都放在了views.py里,按照目前这一的写法,当我们编写的系统复杂较高时,我们的views.py将会越来越复杂,大量的业务函数包含其中使其成为一个包罗万象的文件.本章我们将阐述增加一个业务逻辑层来解决view层的复杂度,相当于在model层和view层中增加一个业务逻辑业务层Biz层,接下来我们根据这个思路来重构我们前面章节的代码. 12.1. 增加inventoryBiz类文件 在inventory app添加一个新的inventoryBi