太原PHP培训
达内太原php培训中心

0351-5608878

热门课程

PHP 读书笔记(下)

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

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中十六个魔术方法详解(三)

JavaScript 与 Java、PHP 的比较

太原php培训资源站

太原PHP编程开发并发编程槽与坑

选择城市和中心
贵州省

广西省

海南省