Где я должен установить свой объект БД в моей модели? (MVC) - PullRequest
1 голос
/ 07 мая 2009

Я хотел бы знать, где лучше всего установить объект БД для моей модели.

Должен ли я это жестко закодировать, поскольку моя модель должна быть рассчитана на один проект, поэтому я устанавливаю ее в своем конструкторе или где бы я ни выполнял инициализацию? или же Должен ли я передать свой объект БД моему конструктору при создании экземпляра моего объекта?

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

Ответы [ 3 ]

2 голосов
/ 08 мая 2009

Пара вещей:

  1. Большинство проектов PHP, использующих соединение с базой данных, представляют эту базу данных, используя шаблон Singleton , если вы не уверены, что это такое, прочтите его.

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

  3. Затем я создам экземпляр подключения к моей базе данных в файле начальной загрузки, используя вышеупомянутый файл шаблона и конфигурации Singleton.

  4. Мои модели обычно полностью абстрагируют хранилище данных базы данных / таблицы, для каждой модели я буду делать что-то вроде этого:

bootstrap.php

$config = load_config_data(ENVIRONMENT);

Db::setDefaultAdapter($config['database']);

Модель / Таблица / User.php

class Table_User extends Db_Table 
{
  // Table name
  protected $_name = 'user';

  /* Do a bunch of database specific stuff */
}

Модель / User.php

class User extends Model 
{
  public function updateUsername($userid, $username)
  {
    // Uses default adapter, Singleton pattern!
    $table = Db::loadTable('user');
    $table->update(
      array('username'=>$username),
      Db::quoteInto('userid = ?', $userid)
    );
  }
}

Это в значительной степени введение в Model в Zend Framework MVC , я хотел бы ознакомиться с некоторыми идеями о том, как организовать ваш код (или избежать некоторых проблем). и на самом деле использовать Framework .)

1 голос
/ 08 мая 2009

Для тестируемости вы должны передать его в конструктор, а не жестко его кодировать. Это поможет вам написать модульный тест, потому что вы можете смоделировать свой объект БД.

0 голосов
/ 08 мая 2009

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

Лично я бы определил объект db во всем, что вы используете в качестве начальной загрузки, а затем попросил бы модели использовать этот единственный объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...