соединение с двумя различными базами данных с Платформой Зенда

Каждое приложение тестируется.

Некоторые приложения тестируются в форме, делает мою компиляцию кода и делает код, появляются к [1 110] функция .

Некоторые приложения тестируются с [1 111] Модульные тесты . Некоторые разработчики являются религиозными о Модульных тестах, TDD и кодируют покрытие к отказу. Как все, слишком много, как правило, плохо.

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

Michael Feathers, который записал: Работа Эффективно с Унаследованным кодом , написал тот код, не обернутый в тесты, унаследованный код. Пока Вы не испытали Большой Комок грязи , я не думаю, что любой разработчик действительно понимает преимущество хорошей Архитектуры приложения и комплект правильно написанных Модульных тестов.

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

TDD получил плохой рэп в последнее время. Когда я думаю TDD, я думаю о догматических разработчиках, придирчиво пишущих тесты, прежде чем они запишут реализацию. В то время как это верно, что было пропущено, путем записи тестов, (сначала или вскоре после), разработчик испытывает метод/класс в обуви потребителя. Недостатки дизайна и недостатки сразу очевидны.

я утверждаю, что размер проекта не важен. То, что является важно , является продолжительностью жизни из проекта. Чем дольше проект живет, тем больше вероятность, что разработчик кроме того, который записал это, будет работать над ним. Модульные тесты являются документацией к ожиданиям приложения - своего рода руководство.

11
задан clami219 5 August 2014 в 10:18
поделиться

3 ответа

Один из вариантов - зарегистрировать 2 дескриптора базы данных из вашего bootstrap.php , по одному для каждого соединения. Например:

$parameters = array(
                    'host'     => 'xx.xxx.xxx.xxx',
                    'username' => 'test',
                    'password' => 'test',
                    'dbname'   => 'test'
                   );
try {
    $db = Zend_Db::factory('Pdo_Mysql', $parameters);
    $db->getConnection();
} catch (Zend_Db_Adapter_Exception $e) {
    echo $e->getMessage();
    die('Could not connect to database.');
} catch (Zend_Exception $e) {
    echo $e->getMessage();
    die('Could not connect to database.');
}
Zend_Registry::set('db', $db);

$parameters = array(
                    'host'     => 'xx.xxx.xxx.xxx',
                    'username' => 'test',
                    'password' => 'test',
                    'dbname'   => 'test'
                   );
try {
    $db = Zend_Db::factory('Pdo_Mysql', $parameters);
    $db->getConnection();
} catch (Zend_Db_Adapter_Exception $e) {
    echo $e->getMessage();
    die('Could not connect to database.');
} catch (Zend_Exception $e) {
    echo $e->getMessage();
    die('Could not connect to database.');
}
Zend_Registry::set('db2', $db);

В ваших контроллерах (например):

public function init()
{
     $this->db = Zend_Registry::get('db');
     $this->db2 = Zend_Registry::get('db2');
}

public function fooAction()
{
    $data = $this->db2->fetchAll('select foo from blah');
    ...
}
11
ответ дан 3 December 2019 в 05:35
поделиться

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

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

Третий вариант - использовать явные имена таблиц во всем приложении. Например, MySQL предоставляет синтаксис db_name.table_name для адресации таблиц в разных базах данных на одном сервере. База данных по умолчанию не имеет значения, и Zend_Db_Table и Zend_Db_Select поддерживают этот синтаксис из коробки.

РЕДАКТИРОВАТЬ:

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

3
ответ дан 3 December 2019 в 05:35
поделиться

Я использую этот Config.ini, вы также можете его использовать:

[production]
#Debug output
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
# Include path
includePaths.library = APPLICATION_PATH "/../library"
# Bootstrap
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
# Front Controller
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.env = APPLICATION_ENV
# Layout
#resources.layout.layout = "layout"
#resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
# Views
resources.view.encoding = "UTF-8"
resources.view.basePath = APPLICATION_PATH "/views/"
# Database
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""
resources.db.params.dbname = "world"
resources.db.isDefaultTableAdapter = true
# Session
resources.session.save_path = APPLICATION_PATH "/../data/session"
resources.session.remember_me_seconds = 864000
[testing : production]
#Debug output
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
# Database
resources.db.params.dbname = "myproject_testing"
[development : production]
#Debug output
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
# Database
resources.db.params.dbname = "myproject_development"

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

resources.db2.adapter = "pdo_mysql"
resources.db2.params.host = "localhost"
resources.db2.params.username = "root"
resources.db2.params.password = ""
resources.db2.params.dbname = "world"
resources.db2.isDefaultTableAdapter = true

, тогда вы можете загрузить ее при загрузке или где угодно :) и это тоже легко

3
ответ дан 3 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: