Общее программирование: когда набор объектов управляется другим объектом, как вы это называете? - PullRequest
1 голос
/ 24 сентября 2010

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

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

  • "my_object" - это в основном контейнер для различных типов данных. После создания этот объект может сохранить себя в БД.
  • «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»? Как называется этот шаблон разработки программы и как вы называете этот тип объекта, если хотите, чтобы другие программисты знали, что он делает?

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Выезд:

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

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

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

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

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

1 голос
/ 24 сентября 2010

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

class my_object_manager {
    protected $my_object_type;

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

Теперь вы, похоже, внимательно следите за шаблоном Active Record , из которого многие реализации Существуют , вы можете посмотреть, как они это делают на практике:)

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

$posts = new Posts(); //Where Posts() extends my_object_manager
$somePosts = $posts->getBy('author','baz');
foreach( $somePosts as $aPost ) {
    ...loop stuff here...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...