2010-09-23 4 views
1

Я ищу помощь в определении этого шаблона проектирования и изучении «типичного» словаря, который он использует:Общее программирование: когда набор объектов управляется другим объектом, как вы его называете?

Я работаю над проектом на PHP, и я создал тонкий слой ORM, который сохраняет общие объекты в и из базы данных. Существует два класса, которые выполняют работу:

  • «my_object» - это в основном контейнер для различных видов данных. После создания этого объекта можно сохранить себя в db.
  • «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... 
} 

Итак, мой вопрос таков: в определении класса для «my_object_manager» мне нужно сохранить свойство, которое идентифицирует, какой тип объекта управляется. Это выглядит примерно так:

class my_object_manager { 
    protected $theKindOfObjectThatThisManages; 

    function __construct($whatToManage) { 
     $this->theKindOfObjectThisManages = $whatToManage; 
    } 
} 

Теперь, простите меня, не зная такого рода базовых вещей, но я самоучка и имею довольно ограниченный словарный запас программирования. Я уверен, что такой шаблон дизайна распространен, но для жизни меня я не смог понять, что он назвал.

Я пытаюсь написать код, который другие программисты могут прочитать и понять, так что мой реальный вопрос: читаете ли вы этот код, что вы ожидаете от вызова $ theKindOfObjectThatThisManages? Что называется этим шаблоном проектирования программ и как вы называете этот тип объекта, если вы хотите, чтобы другие программисты знали, что он делает?

Наконец, редактор вопроса выскочил и сказал мне, что этот вопрос выглядит субъективным и, вероятно, будет закрыт. Я надеюсь, что этот вопрос, на самом деле, подходит для переполнения стека, но если нет, то где я могу задать этот вопрос и получить ответ?

Спасибо!

ответ

1

Для ваших образцов кода, я хотел бы использовать

class my_object_manager { 
    protected $my_object_type; 

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

Теперь, вы, кажется, внимательно следят за Active Record pattern, многие из которых implementationsexist, вы можете пойти посмотреть, как они делают это на практике :)

Обычно вы не предоставляете доступ к объектам _manager(), но наследуете его от наследования my_object(). Таким образом, вы бы что-то вроде

$posts = new Posts(); //Where Posts() extends my_object_manager 
$somePosts = $posts->getBy('author','baz'); 
foreach($somePosts as $aPost) { 
    ...loop stuff here... 
} 
+0

Ах, так ** это **, что такое ActiveRecord. Вы знаете, я слышал об этом/видел его, но я не совсем понял, что это значит, пока я не прочитаю страницу PHPActiveRecord, с которой вы связались. Благодаря! – Andrew

1

Отъезд: дизайн

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

Ваш объект менеджера, в зависимости от того, насколько сложным он получает, может подпадать под несколько моделей.Например:

Составной: Возможно, ваш диспетчер объектов позволяет запускать обновления сразу нескольких объектов (типичный сценарий базы данных) с использованием того же интерфейса. Вы можете изменять отдельные объекты так же, как вы изменяли коллекции.

Фасад: Если ваш диспетчер объектов предоставляет методы для объединения различных частей вашей системы в один, более простой в использовании интерфейс, то он использует шаблон фасада. Например, возможно, ваш диспетчер объектов создает объект «user» и автоматически генерирует свой первый «пост» с помощью одного вызова API. Возможно, вы могли бы использовать функции create() для объектов post и user, чтобы сделать это самостоятельно, но шаблон Facade объединяет их (и, возможно, помогает справляться с проблемами параллелизма), в более простой API, поскольку эти операции обычно вызываются вместе.

Посредник/наблюдатель. Менеджер объектов может нести ответственность за наблюдение за изменениями объектов и обработку «посредничества» между ними. Менеджер объектов может предоставить метод для комментариев к сообщению. Но когда этот метод вызывается, автору сообщения может потребоваться уведомление по электронной почте. Таким образом, ваш диспетчер объектов может нести ответственность за связь между соответствующими объектами и уведомление службы прослушивания электронной почты, отправив событие или подобное сообщение.

+0

Спасибо за ссылку и указатели. FWIW, что бы вы назвали «theKindOfThingThisObjectManages»? – Andrew

+0

Я не знаю, что есть действительно хорошее общее имя, чтобы покрыть этот шаблон, отличный от «Object» или «ObjectType». В зависимости от того, что управляется, более конкретные имена могут включать «Record»/«RecordType», «Document»/«DocumentType» или просто «DatabaseObject». Извините, что у меня нет более окончательного ответа! :) – dlongley

 Смежные вопросы

  • Нет связанных вопросов^_^