课程咨询 :13623629309

太原PHP培训 > 达内新闻 > PHP 读书笔记(下)
  • PHP 读书笔记(下)

    发布:PHPer的进击之路      来源:PHPer的进击之路      时间:2016-11-14

  • PHP 读书笔记(下)

    框架服务

    大多数框架都提供一些封装好的服务,如laravel中的发送email,我们只需简单的调用:

    Mail::send( 'emails.hello', $data,function( $message ){

    $message->to( 'you@yoursite.com','You')->subject('Hello, You!');

    } );

    但是一旦我们换框架,我们就只能痛苦的重构了,一个解决方案是使用适配器:

    interfaceMailerInterface{

    publicfunctionsend( $template, array $data, callable $callback );

    }

    classLaravelMailerAdapterimplementsMailerInterface{

    protected$mailer;

    publicfunction__construct( Mailer $mailer )

    {

    $this->mailer = $mailer;

    }

    publicfunctionsend( $template, array $data, callable $callback )

    {

    $this->mailer->send( $template, $data, $callback );

    }

    }

    classMailControllerextendsBaseController{

    protected$mailer;

    publicfunction__construct( MailerInterface $mailer )

    {

    $this->mailer = $mailer;

    }

    publicfunctionsendMail()

    {

    $this->mailer->send('emails.hello', $data,function( $message ){

    $message->to( 'you@yoursite.com','You')->subject('Hello, You!');

    } );

    }

    }

    App::bind('MailerInterface',function($app){

    returnnewLaravelMailerAdapter($foo['mailer']);

    });

    上面的一段代码给我们很好的示范了怎么使用适配器模式来减少对于框架的依赖。

    总结

    以上介绍的一些方法具体在实际使用时候,还需要细细斟酌,特别是要视你项目规模来酌情使用。

    如果你项目非常小,那就放开手脚,想怎么弄就怎么弄,但是如果你是做ERP这种应用,那就请好好设计的,前期良好的设计会让你后期的维护成本大大降低。

    数据库无关(Independent of Database)

    我们大多数的应用后端存储都是使用数据库,自然而然应用也是维护数据库的表结构设计的,我们的应用所有逻辑都是围绕着数据库展开,前期这没什么问题,但是随着应用继续开发,带来的问题有:

    代码中到处都是和数据库的交互,我们看业务逻辑的时候,完全没办法关注于业务,只能看到数据库交互,更糟糕的是:一旦我们需要换数据库抽象层,那将是一场噩梦

    由于我们使用数据库,我们基本上不可能测试我们代码,每次测试一个功能,我们都必须要保证数据库可用,然后数据库中的数据符合我们的预期,这种痛苦只有做过的才知道

    那如果数据库不是中心,那什么是我们应用的中心呢?

    前面我们讲过clean architecture,最核心的就是领域模层,我们应用的中心也应该是领域层,领域层有可以分为领域模型和领域服务。

    领域模型

    领域模型在php中就是最简单的php对象,可能是下面这个样子的:

    classCustomer{

    protected$id;

    protected$name;

    protected$creditLimit;

    protected$status;

    publicfunctiongetId()

    {

    return$this->id;

    }

    publicfunctionsetId( $id )

    {

    $this->id = $id;

    return$this;

    }

    publicfunctiongetName()

    {

    return$this->name;

    }

    publicfunctionsetName( $name )

    {

    $this->name = $name;

    return$this;

    }

    // ...

    }

    由于是纯的php类,所以不会有什么依赖了,因此是完全解耦的,是能够方便测试的。

    但是如果只有领域模型,意义不大,要配合上领域服务,才能真正的发挥作用。

    领域服务

    领域服务内部可以细分为3层:

    Repositories

    服务领域对象的存取,如果后端是数据库,就是负责将数据从数据库中取出,将对象存入数据库。

    Factories

    负责对象的创建。

    Services

    具体的业务逻辑,通过调用多个对象和其他服务来完成一个业务目标。

    好了,今天就给大家讲这么多吧,喜欢我的内容可以关注或者分享(微信公众平台:tytedu)选择太原达内培训,不再孤军奋战,轻轻松松做IT高薪白领。太原达内培训带领有明确目标的学子迈向成功之路!

上一篇:PHP 读书笔记(上)

下一篇:PHP给你带来的惊喜(一)

最新开班日期  |  更多

php高级开发名企定制班(剩2个名额)

php高级开发名企定制班(剩2个名额)

开班日期:12-29

php高级开发周末班(剩5个名额)

php高级开发周末班(剩5个名额)

开班日期:12-29

php高级开发免费试听(剩5个名额)

php高级开发免费试听(剩5个名额)

开班日期:12-29

更多高级开发工程师精品班

更多高级开发工程师精品班

开班日期:12-29

  • 地址:山西省太原市小店区学府街长治路高新国际A座24层
  • 课程培训电话:13623629309     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56

    在线客服系统