Php 通用编程:当一组对象由另一个对象管理时,您将其称为什么?
我正在寻找帮助,以确定此设计模式并学习其使用的“典型”词汇: 我正在用PHP做一个项目,我创建了一个精简的ORM层,它可以将通用对象保存到数据库中,也可以从数据库中保存通用对象。有两个类可以完成这项工作:Php 通用编程:当一组对象由另一个对象管理时,您将其称为什么?,php,design-patterns,coding-style,vocabulary,Php,Design Patterns,Coding Style,Vocabulary,我正在寻找帮助,以确定此设计模式并学习其使用的“典型”词汇: 我正在用PHP做一个项目,我创建了一个精简的ORM层,它可以将通用对象保存到数据库中,也可以从数据库中保存通用对象。有两个类可以完成这项工作: “my_对象”基本上是各种数据的容器。创建此对象后,可以将其自身保存到数据库中 “my_object_manager”用于管理一组对象,例如,如果您希望检索其中的许多对象并对其进行迭代 作为一个简化的示例,您可以执行以下操作: $post = new my_object('post');
- “my_对象”基本上是各种数据的容器。创建此对象后,可以将其自身保存到数据库中
- “my_object_manager”用于管理一组对象,例如,如果您希望检索其中的许多对象并对其进行迭代
$post = new my_object('post');
$post->title = 'foo';
$post->body = 'bar';
$post->author = 'baz';
$posts = new my_object_manager('post');
$somePosts = $posts->getBy('author','baz');
foreach( $somePosts as $aPost ) {
...loop stuff here...
}
…如果你想加载一堆帖子,你可以这样做:
$post = new my_object('post');
$post->title = 'foo';
$post->body = 'bar';
$post->author = 'baz';
$posts = new my_object_manager('post');
$somePosts = $posts->getBy('author','baz');
foreach( $somePosts as $aPost ) {
...loop stuff here...
}
所以,我的问题是:在“my_object_manager”的类定义中,我需要存储一个属性,该属性标识正在管理的对象类型。它看起来像这样:
class my_object_manager {
protected $theKindOfObjectThatThisManages;
function __construct($whatToManage) {
$this->theKindOfObjectThisManages = $whatToManage;
}
}
现在,请原谅我不懂这些基本的东西,但我是自学成才的,编程词汇非常有限。我确信这种设计模式很常见,但就我的一生而言,我还没有弄清楚它叫什么
我正在尝试编写其他程序员可以阅读和理解的代码,所以,我真正的问题是,如果您正在阅读此代码,您希望调用“$this管理的对象类型”什么?这个程序设计模式叫什么?如果你想让其他程序员知道它在做什么,你把这种对象叫做什么
最后,问题编辑突然出现,告诉我这个问题看起来很主观,可能会被关闭。事实上,我希望这个问题对于堆栈溢出来说是可以的——但如果不是,我在哪里可以问这个问题并得到答案
谢谢大家! 对于您的代码示例,我将使用
class my_object_manager {
protected $my_object_type;
function __construct($whatToManage) {
$this->my_object_type = $whatToManage;
}
}
现在,您似乎正在密切关注,其中许多,您可以去看看他们在实践中是如何做到的:)
通常,您不提供对_manager()对象的访问,而是使我的_对象()从中继承。所以,你会有
$posts = new Posts(); //Where Posts() extends my_object_manager
$somePosts = $posts->getBy('author','baz');
foreach( $somePosts as $aPost ) {
...loop stuff here...
}
退房:
根据对象管理器的复杂程度,对象管理器的设计可能有几种模式。例如:
复合:也许您的对象管理器允许您使用同一界面同时在多个对象上运行更新(典型的数据库场景)。您可以像更改集合一样更改单个对象
Facade:如果您的对象管理器提供了将系统的各个部分组合到一个更易于使用的界面中的方法,那么它使用的是Facade模式。例如,您的对象管理器可能会创建一个“用户”对象,并通过单个API调用自动生成他们的第一个“帖子”。也许您可以自己在post和user对象上使用create()函数来实现这一点,但是Facade模式将它们(可能还有助于处理并发问题)组合到一个更简单的API中,因为这些操作通常一起调用
中介/观察者:您的对象管理器可能负责观察对象的更改并处理它们之间的“中介”。您的对象管理器可能会提供一种评论帖子的方法。但是当调用此方法时,可能需要通过电子邮件通知文章的作者。因此,您的对象管理器可以负责在相关对象之间进行通信,并通过发送事件或类似消息通知侦听电子邮件服务。感谢您提供的链接和指针。FWIW,你会怎么称呼“这个对象管理的东西的种类”?我不知道除了“对象”或“对象类型”之外,还有一个真正好的通用名称来涵盖这个模式。根据管理的内容,更具体的名称可能包括“记录”/“记录类型”、“文档”/“文档类型”或简单的“数据库对象”。很抱歉,我没有更明确的答案!:)啊,这就是ActiveRecord。你知道,我听说过/看过它,但直到我阅读了你链接到的PHPActiveRecord页面,我才完全理解它的确切含义。谢谢