Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop CakePHP中使用的设计模式_Oop_Design Patterns_Cakephp - Fatal编程技术网

Oop CakePHP中使用的设计模式

Oop CakePHP中使用的设计模式,oop,design-patterns,cakephp,Oop,Design Patterns,Cakephp,我的问题:CakePHP中使用的设计模式有哪些好例子? 为什么使用CakePHP作为我的上下文 我已经使用CakePHP大约一年了,所以我认为在这种背景下思考更容易。CakePHP在设计模式使用方面也很丰富(我对此很有信心)——除了几个明显的模式之外,我不知道正在使用什么模式 我一直在阅读的有关该主题的示例书: 我正在读以下几本书,它们都在某种程度上涵盖了设计模式;不幸的是,他们大多使用java和C++代码示例,这使得我难以在实际的水平上掌握设计模式(我是PHP开发者,所以我很难吸收它): “企

我的问题:
CakePHP中使用的设计模式有哪些好例子?

为什么使用CakePHP作为我的上下文
我已经使用CakePHP大约一年了,所以我认为在这种背景下思考更容易。CakePHP在设计模式使用方面也很丰富(我对此很有信心)——除了几个明显的模式之外,我不知道正在使用什么模式

我一直在阅读的有关该主题的示例书:
我正在读以下几本书,它们都在某种程度上涵盖了设计模式;不幸的是,他们大多使用java和C++代码示例,这使得我难以在实际的水平上掌握设计模式(我是PHP开发者,所以我很难吸收它):
“企业应用程序架构模式”,Martin Fowler著
“头先设计模式”,由四人帮(埃里克·弗里曼、伊丽莎白·弗里曼、凯西·塞拉和伯特·贝茨)(2004年)
“设计模式:可恢复的面向对象软件的元素”,作者Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)

我可以在CakePHP中观察到的模式示例 -我猜配置文件使用了类似于工厂模式的东西
-也许$this->params正在使用与观察者模式相关的东西?我不确定…
-MVC(很明显!因为Cake PHP使用MVC文件结构)
-ORM(另一个非常明显的问题)
-可能HTML助手正在使用装饰器模式?

摘要

我不希望有人会继续下去,找出CakePHP中使用的所有模式——我只是想找几个设计模式的例子,很明显我没有找到

我想到的一个概念是。不完全是一种模式,但实际上是一种语言特性,在某些语言(如Ruby中的模块)中可用,但在其他语言(如Java)中不可用。当5.4变得稳定时,我们将看到PHP,但是CakePHP的模型行为是一个很好的例子,可以模拟这种通常不可能的多重继承

class Post extends AppModel { // we can only inherit from one class

    public $actsAs = array('This', 'That', 'Other'); // but we can do this instead

}
软件设计模式(如RoR):

  • 约定优先于配置:配置中的所有配置文件

  • 模型视图控制器:文件夹:模型、控制器、视图等


  • ActiveRecord,关联数据映射:数据库映射

  • 前端控制器:主入口点(index.php)

可在评论中找到:

创作模式:

  • Singleton--通过“getInstance,Singleton”查找

  • 工厂--按“工厂”查找

  • 生成器--由“生成器”查找

结构模式:

  • 适配器--通过“适配器”查找

  • 前端控制器(.htaccess,include)

行为模式:

  • 策略——通过“策略”查找
视图:

  • 两步视图模式--“两步视图”

不幸的是,IMHO蛋糕使用的图案太少。更多的OO/封装/依赖注入/松耦合/duck类型将有助于开发更复杂的应用程序。只有我的2美分。ActiveRecord,关联数据映射,前端控制器和MVC。我开始看到一些设计模式是如何重叠的。例如,“域模型”设计模式与MVC中的“M”重叠。“简单域模型”模式为每个域对象都有一个数据库表。这与MVC中“M”或模型的CakePHP标准模式重叠(在MVC中,每个数据库表实际上有一个“M-Model”类)。另一个重叠的例子是“前端控制器”模式,其中CakePHP中的“C”(控制器)也充当“事务脚本”(因为cake有$this->request,它处理$\u get/$\u post/和$\u request…),我自己也要问同样的问题。杰出的在G+中的CakePHP社区中发布了这篇文章。希望我们能更多地关注这个问题。您提到您购买了Head First Design Patterns一书。我认为Martin Fowler的《企业应用程序体系结构模式》和《设计模式:可重用面向对象软件的元素》也是很好的书。此外,我还做了一个观察(在一年多前提出这个问题后,我有很多时间思考这个问题……)。大多数框架都有一个请求对象,包括CakePHP——这可以被认为是一种观察者类型的模式。。。大多数对象都是使用工厂模式构建的,例如视图工厂。这不是CakePHP的局限性,而是PHP本身作为编程语言的局限性吗?事实上,CakePHP让我们可以轻松地在MVC应用程序中实现这一点,而早在PHP4中,CakePHP就已经解决了缺乏这种语言功能的问题。值得注意的是,不仅仅是行为让人感觉像是混合体/特质。。还有控制器的组件、视图的帮助程序和shell的任务。您关于混合/多重继承的观点绝对值得一提。“我没有意识到PHP5.4将包含mixin——这是个好消息。”戴泽尔,我误解了你的答案。最后一句话基本上澄清了我的想法。我第一次读你的答案时没有领会到这一点。