фабричный класс в PHP, нет __construct?Какие имена методов я использую? - PullRequest
2 голосов
/ 11 июля 2010

У меня есть фабричный класс, который я создаю на PHP. Каждый экземпляр представляет строку из таблицы базы данных.

Поскольку я буду иметь дело с десятками строк базы данных, было бы глупо, чтобы каждый экземпляр делал выбор при создании экземпляра. Итак, у меня есть метод, который просто помещает значения в объект, для использования вместе с запросом к базе данных, который возвращает много строк.

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

Так что, похоже, что между этими двумя методами мне не понадобится __construct метод.

Существует ли название для этого типа шаблона, более конкретное, чем «фабричный»? Как мне назвать эти два разных метода для создания объекта - существуют ли обычно используемые имена для этих методов?

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Я думаю, что ваш шаблон чем-то похож на шлюз табличных данных .

Так как ему нужен доступ к базе данных, я бы порекомендовал дать ему конструктор. Вы можете передать конструктору объект базы данных (например, PDO, если вы его используете, или другие), поэтому классу не нужно знать, как подключаться к базе данных.

В противном случае ваша идея кажется хорошей.

0 голосов
/ 12 июля 2010

Может быть, вам нужен класс хранения DAO в дополнение к вашему классу данных?

<?php
class Row {
  private $fields1;
  private $fields2;
  __construct($field1, $field2) {
    $this->fields1 = $fields1;
    $this->fields2 = $fields2;
  }
}

class Storage {
  public load($id) {
    $rawRow; // loaded from db
    return $this->createRow($rawRow);
  }
  protected createRow(array $rawRow) {
    return new Row($rawRow['fields1'], $rawRow['fields2']);
  }
}
?>
...