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

0351-5608878

热门课程

PHP 读书笔记(上)

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

PHP 读书笔记(上)

框架无关(Framework Independence)

首先我们必须说:框架是好的!大大的提高了我们的开发速度,像市面上流行的框架如:laravelsymfonyzend framework提供了一些通用问题的解决方案,如认证,数据库交互,MVC,路由等,最重要的是这些方案一般都是一些久经考验的方案。正是由于这些方案,我们能更关注我们的业务逻辑,不必陷入一些重复的、细节的问题中。

使用框架的另一个好处是:快速的进步,因此快去使用、学习框架吧。框架定义好了设计模式,你如果不按照框架定义好的模式去做,你就run不起来,于是你就必须去用正确的,好的模式,这样你就可以不断进步。

但是,我们不得不承认,使用框架都是有成本的,在正式开始项目之前,你必须要去学习它,但是一旦学习过后,你就不用再去做那些恼人的重复工作了,辛苦一次,快乐一生^_^

框架的一些不足

讲了这么多框架的好处,但是必须不幸的告诉你,所有的框架都有一个共同的问题:耦合。你越是使用这个框架,你越是离不开他,你跟他的耦合也越深,一旦这个框架某一天消失了,你就 game over !此处的消失,可能是框架升级了,不兼容了,或者是作者不维护了,等等。

框架无关指的是什么

框架无关到底指的是什么?

我们能够快速的切换框架,可能今天laravel挺火,我们用这个,明天突然symfony挺好,换换换的!

当我们在写中大型应用的时候,我们可能会有些处理表单的代码,有些和数据库交互的代码,有些辅助函数,但是这些是我们的业务逻辑吗? NO!

那什么才是我们的业务逻辑呢,或者说是我们的应用。答案是: domain model domain services

领域模型和领域服务包括了:servicesrepositoriesfactoriesentities,这些才是我们真正的应用。至于其他的,都是在领域模型和领域服务基础上构建的UI

为了达到框架无关,下面是一些建议。

对于框架的使用进行抽象

我们没多写一行使用框架的代码,我们都在增加一分对于框架的依赖。那怎么做才能减少对于框架的依赖呢?

尽可能使用接口

尽可能依赖于接口,然后通过依赖注入实现依赖反转

使用适配器模式

通过适配器模式来使用第三方库,实现定义好的接口

坚持SOLID原则和clean code

坚持SOLIDclean code原则,使得我们代码能组织的很好,并且减少依赖

说完这么多,可能大家还是不是很懂,还是让我们上代码的。

talk is cheap, show me the code

路由和控制器

路由是控制器是我们应用程序的入口,我们真的很难想象不依赖框架提供的路由和框架,怎么写我们的代码,下面是我们开发中最常见的一段代码:

classCustomersControllerextendsBaseController{ }

写下这行代码的同时,意味着我们接下去控制器中的每一行都依赖于 BaseController ,怎么办?

使用适配器模式来适配控制器

namespaceMyApp\Controller;

classCustomers{

publicfunctionindex(){

return[

'users'=>$this->customerRepository->getAll() ];

}

}

然后适配器如下:

classCustomersControllerextendsAbstractActionController{

protected$controller;

publicfunction__construct( Customers $controller )

{

$this->controller = $controller;

}

publicfunctionindexAction()

{

return$this->controller->index();

}

}

适配器做的事情就是包裹着我们自己的控制器 Customers ,然后进行调用。到这里,我们不禁会问自己,这么做是否值得?

我们做的这一切工作都是为了让我们的代码不耦合于框架

另一个解决方案是:尽可能保持控制器简单。

就像SRP(单一职责原则)倡导的,我们要使得我们的控制器尽可能的功能单一。如果我们将控制器比喻为一个产生response的工厂,那控制器的职责只负责将输入转换为输出,至于具体的业务逻辑,都应该封装在领域模型和领域服务中。

我们坚持的一个原则是:胖model,瘦controller。基于这个原则,我们的控制器应该是下面这样的:

classCustomersControllerextendsAbstractActionController{

publicfunctionindexAction()

{

return[

'users'=>$this->customerRepository->getAll() ];

}

}

上面的控制器很好的说明了我们原则:控制器尽可能简单,将所有逻辑放入领域层。

视图层

视图层中都是一些展示逻辑,但是我们需要注意的是:每个框架都提供了一些辅助函数来生成一些html代码,如果换框架,这会是很头痛的一部分。

因此我们在写下每一行代码的同时,需要时刻提醒自己:尽量减少对于框架的依赖。

表单

表单是我们项目中最难处理一部分,同样的,我们也很难做到和框架解耦。

在使用表单的过程中,我们应该牢记:表达只包含验证和过滤规则,和业务逻辑相关的都应该放入领域层中。

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

上一篇:谁在说谎?
下一篇:PHP 读书笔记(下)

PHP中十六个魔术方法详解(三)

JavaScript 与 Java、PHP 的比较

太原php培训资源站

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

选择城市和中心
贵州省

广西省

海南省