依赖注入和外观模式案例

原创2019-02-26 09:54:57122
摘要:通过本章的学习,了解了如果通过依赖注入实现解耦,并通过外观模式实现数据的接口统一,让更多的业务方法在业务类中实现,避免了原先客户端访问需要了解实际调用业务的问题。实现代码如下:Db.php:<?php namespace app\model\index\login; //数据库操作类 class Db {     //数据库连

通过本章的学习,了解了如果通过依赖注入实现解耦,并通过外观模式实现数据的接口统一,让更多的业务方法在业务类中实现,避免了原先客户端访问需要了解实际调用业务的问题。实现代码如下:

Db.php:

<?php

namespace app\model\index\login;


//数据库操作类
class Db
{
    //数据库连接
    public function connect()
    {
        return '数据库连接成功<br>';
    }
}

Validate.php:

<?php

namespace app\model\index\login;


//数据验证类
class Validate
{
    //数据验证
    public function check()
    {
        return '数据验证成功<br>';
    }
}

View.php

<?php

namespace app\model\index\login;


//视图图
class View
{
    //内容输出
    public function display()
    {
        return '用户登录成功';
    }
}

Container.php

<?php

namespace app\model\index\login;


class Container
{
    //用户存放传入的类
    public $instance=[];

    //绑定类
    public function  bind($abstract,\Closure $closure)
    {
        $this->instance[$abstract]=$closure;
    }

    //创建类
    public  function make($abstract,$pams=[])
    {
        return call_user_func_array($this->instance[$abstract],$pams);
    }
}

Facade.php

<?php
namespace app\model\index\login;

class Facade
{
    //创建容器变量
    public static $container;

    //初始化容器
    public  static  function init(Container $container)
    {
        static::$container=$container;

        //将Db类绑定到容器中
        static::$container->bind('db', function(){
            return new Db();
        });

        //将Validate类实例绑定到容器中
        static::$container->bind('validate', function(){
            return new Validate();
        });

        //将View类实例绑定到容器中
        static::$container->bind('view', function(){
            return new View();
        });
    }

    //连接数据库
    public static function connect()
    {
        return static::$container->make('db')->connect();
    }

    //验证数据
    public static function check()
    {
        return static::$container->make('validate')->check();
    }

    //显示数据
    public static function display()
    {
        return static::$container->make('view')->display();
    }


    //登录
    public static function login()
    {
        echo self::connect();
        echo self::check();
        echo self::display();
    }
}

Index.php

<?php
namespace app\index\controller;

use app\model\index\login\Container;
use app\model\index\login\Facade;
use think\Db;
use think\Request;

class Index
{
    public function index()
    {
        //创建容器
        $container = new Container();
        //初始化容器
        Facade::init($container);
        //登录
        Facade::login();

    }
}

效果图:

QQ截图20190226095324.jpg

批改老师:韦小宝批改时间:2019-02-26 10:01:41
老师总结:写的很不错 这些都是框架中的一些重要知识点 当然也可以使用在其他的地方 没事要记得多去研究研究

发布手记

热门词条