论语.颜渊4哲学

     
其次各个人应该醒目本身在这几个地方的职务,也正是君要像君,臣要像臣,阿爸要像阿爹,外甥要像孙子,唯有如此,一旦现身难题就会分晓怎么管理涉及。

The Separation Of Concerns

我们的靶子是创设二个框架,前边的代码固然可满足要求,然而贫乏封装,未有放手命名空间,那些在规模壮大时并不便利。同时每建2个新站都亟需复制整个front.php。对它们做封装可增长可用性和可测试性。

本节引进了命名空间,创建Simplex\Framework的类和控制器以及扩充psr-4的自行加载。

本节的分离关心的含义莫过于是从工程规模显示的:通过对前面落成的功用做叁次代码整理,揭露现代WEB PHP框架的大旨目录组织办法。

原文:The Separation Of
Concerns

【学究】

The HttpFoundation Componen

正是是最轻松易行的业务,使用框架也好于不行使。再轻巧的代码都面临以下难题:

  • 对参数的决断
  • 平安难题,比方XSS攻击;
  • 方便单元测试;

再简单的标题假诺要满足上边的口径,写出的代码都比选取框架还累。

只要您感觉安全性可测试性不足以说服你打住写旧代码,赶紧采纳新框架的话
,那么您能够告一段落读本书并持续你以往的事情业形式了。(深深地感受到笔者的高冷)

框架存在的目标是让您更加快地写出更加好的代码,而不是让你具备捐躯,如果有怎么着捐躯的话,笔者想应该是上学开销的增加吗。

今后就算不采纳框架,也应该接纳HttpFoundation组件的RequestResponse管理请求与响应。

原文:The HttpFoundation
Component

     
现实中过六个人假若面对过失,总是不愿承责,总希望有人来担任自个儿过错变成的结果。那样的气象当然发出狐疑,也不便宜治理集体。孔夫子赞美的不是子路断案技艺,赞美的是子路的担当精神。

前言

全力以赴引入该课程:《Create Your own PHP
Framework》

Symfony的就学蛮累的,官方文书档案尽管很丰富,然则团队办法像参考书而不是指南,一些不利的指令性文书档案通常是是看组件文书档案时提到了才偶然发掘的,那上头以为就跟看Laravel和Webpack的合法文书档案有反差。同时谷歌(Google)中找Symfony的标题也不像Laravel轻巧找到答案,常常是团结看完全体官方文书档案结合源码才减轻,进程赶的时候正是折磨人。总的来讲,就算11分可怜强劲,可是在左右上,确实不像Laravel那么方便人民群众学习。如若从Linux的设计军事学上来讲,小编觉得Laravel是计策,Symfony是编写制定。攻略的目的是在易用的前提下,提供丰硕的灵活性;而编写制定相反,在保管灵活性的情景下,丰盛易用,相比较难学是自然的。战术须要依赖于机制之上,所以Laravel依赖Symfony。

事先在学Laravel时,看了《怎样Composer一步一步营造和煦的PHP框架》那么些种类,对于Laravel的学习大有裨益。于是在学Symfony时,也是指望有个八玖不离十的课程,结果在Symfony官方文书档案中有时候找到了《Create
Your own PHP
Framework》
,学完后再看Symfony确实清晰了多数。

此间大致做下每1节的笔记,首要记了一些企划观念的点,相比较零散,看完最初的小说再来看估量会持有共鸣。

     
子张问推崇道德和识别吸引的力量。孔丘说:“主李继宏信,向义靠拢,那就是讲究道德。爱1位企盼他活下来,厌恶起来就渴望他当时死去,既希望他活,又愿意他死,那正是吸引。‘诚然不嫌贫爱富,也是喜新厌旧。’”

introduction

When creating a framework, following the MVC pattern is not the right
goal. The main goal should be the Separation of Concerns.”

观察那句话时,作者回想在此以前跟人家谈怎么着一步步学习Laravel时说:“路由是框架的水源,而在那之上,通过构建MVC的每1层就做到了主导框架;然后再搭配一些当代要求天性比方命令行、测试;以及一些常用服务:队列、安全注解等。就能明白Laravel。”

立刻间就被打脸了,Symfony建议了创设框架的第贰目的是关怀点分离。从意见层面上是对的,MVC不是唯1的消除,但是太过抽象,MVC只是1种具体的关切点分离的措施,对于常见开荒者会相比易于了解。实际上,借使自己只想着关切点分离,也还不亮堂什么入手。

干什么要团结写三个框架?

  • 研讨Symfony, 那是本人的基本点目标;
  • 基于自身特有供给做三个团结的框架;
  • 纯粹出于查究的童趣;
  • 重构旧代码以便符合今世的一流实践;
  • 表明你和谐。。。

原文:introduction

      子曰:“片言能够折狱者,其由也与?”子路无宿诺。 

Unit Testing

这一节,对于Framework本条的类测试了404,
500正常响应,该类的测试覆盖率为100%。那一节对于后续学习单元测试是很有启发性的:

  • 怎样安插单元测试文件phpunit.xml.dist
  • 什么创制Mock Object,以幸免要重视真实情形;
  • 怎么着尽量的覆盖测试,通过404500正常响应的言传身教表达;
  • 什么转移覆盖率报告:

$phpunit --coverage-text # 命令行输出$phpunit --coverage-html=cov/ # 输出HTML文档

这1节的开导在于:在写代码时,传参应该尽也许设计成接口才便于Mock;而不当以throw的方法抛出;那样子会方便测试。其它假诺您能从单元测试的角度去思量框架,就会发掘众多框架中以为说不定多余的统一盘算并不是剩下的。比方LaravelFacade
原文:Unit
Testing

     
历来有这么三种解释。1说子路明决,凭单方面包车型客车陈述就足以作出判别;二说子路为人忠信,人们都卓殊信服他,所以有了芥蒂都在他前边不讲假话,所以凭一面之辞就能够明辨是非;三说子路忠信,他所说的话决无虚假,所以只听当中一面之辞,就可以决断案件。但无论哪一种解释,都得以说明子路在刑狱方面是卓有才具的。

The DependencyInjection Comonent

front.php的代码基本上在各种应用中都是重复的,能够设想将其移到Framework构造函数中,但是你会发觉:没办法加多新的listener,
不可能模拟接口做单元测试等等。在实际意况中,大家要求区分开荒情况与生产条件;大概想要加多越多的dispatcher;改变response的输出字符集等,由于相关的类都只在front.php中出现,所以那一个改换都要在front.php中加进代码完结,最后肯定会导致front.php尤其大。而当大家搞多个新的选拔时又须要将front.php拷贝过去,万1要改时就显得更不便利。有没有三个好的主意,能够保持1如既往当前框架的油滑,不过又要可定制,能够单元测试,同时又不曾再度代码吗?正视注入(DI)便是缓慢解决那一个主题材料的好方法。symfony/dependency-injection正是1个棒的DI零件,其余三个轻量级Pimple也是广受好评。

经过注重注入,区别的服务都改成了可配备的。框架自个儿也因此容器初始化,发轫化时的参数也都以容器,可遵照须求传递不一致的兑现。而disptacher也是个容器,配置的时候可以依据实际情形在开端化阶段加多尽只怕多的listener。最终,front.php的代码就改为获取framework的容器就能够,别的的事务则在container.php布署。当程序变复杂时,将listener独立独立出来,将计划单独独立出来,都以很简单的事务。基本上能够说,信赖注入是当代框架的标配了。

原文:The DependencyInjection
Comonent

【原文】 (12.11)

Templating

直白渲染模板是有题目标,当事情逻辑稍微复杂一点就不恐怕在模板中产生。由此必要将逻辑与渲染模板分开。

那壹节为啥不是向来谈控制器啊,作者想跟第叁节作者提到的关注点分离的概念有关,最近截至,框架的难点在于逻辑在模板中做很难堪,所以当前事务是要把模版与逻辑抽离出来,本节模板逻辑分离是目的,控制器只是常规做法。

按照Symfony的惯例。通过给Route属性,增加_controller本条键值,它指明路由对应的主意,框架将直接调用_controller完了各样不相同的职业。

此处有个注意点,路由的性质都被保存到$request->attributes中,该属性用保存跟HTTP不曾平素有关的消息。

增加了_controller性格之后,再将路由信息退出到独门三个文本src/app.php,以往模板与事务逻辑区分开了。

原文:Templating

【原文】 (12.10)

event dispatcher

漫天框架即便是万事俱备的,但称不上是一个好框架。全部的好框架都有很强的可扩张性。那么怎么着是可增添性呢,小编给了多个蛮不错的概念:

Being extensible means that the developer should be able to easily
hook into the framework life cycle to modify the way the request is
handled.

实际上,event dispatcher那一个名字糟糕驾驭,笔者是向来把它正是Laravelmiddleware来看待。

原文:event
dispatcher

【通译】

The HttpKernel Component: The HttpKernel Class

HttpKernelHttpKernelInterface的暗中同意完结。相比较于本身达成,它提供了更完备的管理机制,举个例子大家友好的框架只管理了404500的谬误,但还有其余的谬误没管理;此外,它提供了event dispatcher的各类暗中认可机制,允许灵活地决定越发时、调整器进入内外、渲染视图时的体现;最终,在平安方面和范围升高后的呈现也在各种实际的网址中显现得尤其了不起。
原文:The HttpKernel Component: The HttpKernel
Class

     
齐哀公向孔丘咨询治理国家的核心。万世师表通过君臣老爹和儿子的涉嫌来做回应。其实尼父显明公布地点和涉嫌的标题。

笔记

     
首先在其他集体中每一个人都要明晰本身所处的岗位,正像未来合作社管理中人力财富对于每一种岗位做角色定位和作用描述,令全数人在四个团组织中找到属于自身的职位。

The HttpKernel Component: HttpKernelInterface

HttpKernelInterfaceHttpKernel组件最重视的1个艺术。好些个组件都正视于该接口,比方HttpCache。所以本身规划框架的时候,应该完结该接口,以便越来越好地动用现成组件。(那一节跟下边壹节计算起来呢正是一句话:本人达成的框架大旨会有很多标题,依旧选拔HttpKernel那么些组件好)

原文:The HttpKernel Component:
HttpKernelInterface

     
崇德和辨惑对于贰个生存在社会中的人是必定会师临的话题。一人既要崇尚道德修养,又要辨识疑心来源,并不争辨。孔圣人回答一人达成忠信礼仪就是崇尚道德修养,从行为上参与解析,应该应对相比精准;通过既生既死的情绪争持来分析辨别疑心,那样回应也恰如其分。

END

【原文】 (12.12)

The HtppKernel Component:The Controller Resolver]

上1节截止,全部的操作都是进程化的。我们盼望将_controller本着贰个类的措施,比如LeapYearControllerindexAction。退换起来也很轻易。将路由的_controller改为[new LeapYearController(), ‘indexAction’]即可。

但是那也拉动了其余2个通病,不论路由有未有应用,在它们增进的时候,调控器都被早先化,那对质量是个极大的熏陶。由此大家盼望唯有采纳的路由才伊始化。那个难题能够应用http-kernel模块解决。

http-kernel提供了格外丰富的效率,可是我们未来只关心HttpKernel\Controller\ControllerResolverHttpKernel\Controller\ArgumentResolver

前者能够用来路由中规定出要调用的秘技;后者用来规定要传送给艺术的参数;参数解析器使用了反光机制,以便落成依赖注入和将路由的attributes的同名参数字传送递进去。调用路由艺术与传参,本人做还是要费肯定武功的,所以采纳那多个解析器都以必须的。

原文:The HtppKernel Component:The Controller
Resolver

哲学 1

The Routing Component

上边轻巧的路由并不太能满意大家的渴求,比方大家想达成路由的通配符相称就相比费心。
就此,使用第二方的路由库是必备的。symfony/routing就很便利。那么些路由很好,对象却某个多,刚看时还真是不太好领悟。

Routing组件的主干目的:

  • RouteCollection 路由集结
  • Route 单个路由
  • RequestContext
    请求上下文,通过fromRequest方法与Request绑定。(那种分离有利于测试)
  • UrlMatcherRouteCollectionRequestContext绑定

接下来通过

$attributes = $matcher->match($request->getPathInfo());

赢妥善前的路由消息,上边那个实例表明各种路由都会有_route本条性格,同时若是定义了通配属性,也会化为对应的变量。

print_r($matcher->match('/bye'));/* Gives:array ( '_route' => 'bye',);*/print_r($matcher->match('/hello/Fabien'));/* Gives:array ( 'name' => 'Fabien', '_route' => 'hello',);*/print_r($matcher->match('/hello'));/* Gives:array ( 'name' => 'World', '_route' => 'hello',);*/

其它,当match不到时,会抛出如下非常:Routing\Exception\ResourceNotFoundException
行使Routing有个附加的功利,便是能够从依照路由生成路线:

echo $generator->generate( 'hello', array('name' => 'Fabien'), UrlGeneratorInterface::ABSOLUTE_URL);// outputs something like http://example.com/somewhere/hello/Fabien

路由的难题消除了,不过到后日还没调整器,这几个前边应该要解决了。

原文:The Routing
Component

【学究】

The Front Controller

用于分配路由的调节器称为前端调节器(Front Controller),它根据$request->getPathInfo()调用分歧对象代码。这一个框架到此最大的标题在于路由于于轻易,所以下一节理应是消除路由难题。

原文:The Front
Controller

      本章里,子张问万世师表的主题素材异常理学,也是豪门期待有答案的话题。

     
万世师表也晓得偏听断案很冒险,所以也就只是赞誉子路。大旨的因由是子路平素说话就算数,相当于子路敢说敢做,从不纠缠,他乐于为温馨的结论担负,才是偏听断案的基本点。

     
可知《诗经》那句话是来分析辨惑的,而非解析崇德。(只是读者个人臆断而已)

     
姜昭问孔丘怎么样治理国家。尼父说:“做天皇的要像君的样板,做臣子的要像臣的样板,做老爹的要像父亲的样子,做孙子的要像外甥的旗帜。”姜公子小白说:“讲得好啊!假设君不像君,臣不像臣,父不像父,子不像子。小编即使有粮食,能吃得上吗?”

     
不过孔丘借用《诗经.小雅.我行其野》篇的终极两句”诚不以富,亦祗以异。”来总括就像令人匪夷所思。到底是那那句话来注解崇德和辨惑,依旧仅仅来给辨惑做证据呢?可以好好商量一下。

     
其次什么是崇?什么是辨?崇为认可、推崇;辨为区别、鉴定识别;那两者都以力量,
唯有清楚德和惑本事崇和辨。

     
错位和归位正是其余集体里最大的难点所在。角色定位,本色表现,随时改造系统里的关系,才是治理国家可能组织的最根本,调换是最大的本钱。孔仲尼那里回答其实赏心悦目和通透。

哲学 2

     
姜阳生问政于孔夫子。尼父对曰:“君君、臣臣、父父、子子。”公曰:“善哉!信如君不君,臣不臣,父不父,子不子,虽有粟,吾得而食诸?” 

   
“偏听则暗,兼听则明”这是清理难点的最入眼法宝,那里为什么万世师表对子路用单方面包车型地铁供述就做判别还那样讲究呢?是何许原因呢?

     
孔丘说:“只听了1派的供词就足以裁定案件的,差不多唯有仲由吧。”子路说话没有不算数的时候。

     
首先什么是德?什么是惑?德为性,是人之当然,是一种精气神;惑为情,是人之表现,是一种行为艺术。因为道德模糊才会现出狐疑。

【通译】

   
《诗经》”诚不以富,亦祗以异。”那两句话是一种选取和承担的情趣,本意是足以承受喜新厌旧而又不认同嫌贫爱富。约等于你挑选死就要接受死的气象,选取生要接受生的景色;无法想接受生又要祈求死的养尊处优,想接受死又要迷恋生的开心。也正是说一个人的行为和理念一定是联合,不然就会现出疑忌。

【学究】

     
子张问崇德辨惑。子曰:“主忠信,徙义,崇德也。爱之欲其生,恶之欲其死,既欲其生,又欲其死,是惑也。‘诚不以富,亦祗以异。’”

【通译】

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。