课程咨询 :13623629309

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

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

  • 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高级开发名企定制班(剩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