代码之家  ›  专栏  ›  技术社区  ›  Andrew

通用编程:当一组对象由另一个对象管理时,您怎么称呼它?

  •  1
  • Andrew  · 技术社区  · 15 年前

    我正在寻找帮助来识别这种设计模式并学习它使用的“典型”词汇:

    • “myu对象”基本上是各种数据的容器。创建此对象后,可以将其自身保存到数据库中。
    • “my\u object\u 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...
    }
    

    所以,我的问题是:在“my\u object\u manager”的类定义中,我需要存储一个属性,该属性标识所管理的对象的类型。它看起来像这样:

    class my_object_manager {
        protected $theKindOfObjectThatThisManages;
    
        function __construct($whatToManage) {
            $this->theKindOfObjectThisManages = $whatToManage;
        }
    }
    

    我正在尝试编写其他程序员可以阅读和理解的代码,所以,我真正的问题是,如果您正在阅读这段代码,您希望调用“$thekindofobjectthatthismanaged”什么?这个程序设计模式叫什么?如果你想让其他程序员知道它在做什么,你怎么称呼这种对象?

    最后,问题编辑突然出现,告诉我这个问题看起来很主观,很可能会被关闭。我希望这个问题,实际上,对于堆栈溢出来说是可以的-但是如果不是,我在哪里可以问这个问题并得到答案?

    谢谢您!

    2 回复  |  直到 15 年前
        1
  •  1
  •   Vinko Vrsalovic    15 年前

    对于您的代码示例,我将使用

    class my_object_manager {
        protected $my_object_type;
    
        function __construct($whatToManage) {
            $this->my_object_type = $whatToManage;
        }
    }
    

    现在,你似乎在密切关注 Active Record pattern implementations exist ,你可以去看看他们在实践中是如何做到的:)

    通常,您不提供对\u manager()对象的访问,而是使我的\u object()从中继承。所以,你会有

    $posts = new Posts(); //Where Posts() extends my_object_manager
    $somePosts = $posts->getBy('author','baz');
    foreach( $somePosts as $aPost ) {
        ...loop stuff here...
    }
    
        2
  •  1
  •   dlongley    15 年前

    退房:

    http://en.wikipedia.org/wiki/Design_pattern_(computer_science)

    您的对象管理器的设计,取决于它的复杂程度,可能属于几种模式。例如:

    复合:也许您的对象管理器允许您使用相同的接口一次对多个对象运行更新(典型的数据库场景)。您可以用更改集合的相同方式更改单个对象。

    Facade:如果您的对象管理器提供了将系统的各个部分组合到一个更易于使用的接口中的方法,那么它就是在使用Facade模式。例如,您的对象管理器可能会创建一个“user”对象,并通过一个API调用自动生成它们的第一个“post”。也许您可以自己在post和user对象上使用create()函数来实现这一点,但是Facade模式将它们(也可能有助于处理并发问题)组合到一个更简单的API中,因为这些操作通常一起调用。