Что должно быть возвращено из вызова вставки базы данных? - PullRequest
1 голос
/ 24 января 2012

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

Существуют ли передовые практики в отношении того, что следует возвращать из функции вставки источника данных?

Исходные мысли:

Логический успех: не дает мнелюбая причина сбоя

Объект настраиваемого ответа с логическим успехом и строкой Причина: Не удается обработать> 1 ответ вставки

Список объектов настраиваемого ответа: похоже, что я хочу ...

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Если бы это был я, я бы настроил свой API на выдачу исключений, если строка была вставлена ​​неправильно.

будет выглядеть примерно так (только для демонстрации):

$dbo = new Database();

foreach ($items as $item) {

    try {
        $dbo->insert($item);

        Log::toLogfile('Row was successfully inserted');

    } catch (Exception $e) {

        // If an exception failed upon insert, I can log the message and move on
        error_log($e->getMessage());
    }
}

class Database
{
    public function insert(array $item) {

        // Here you can add any number of validators
        if (empty($item)) {
            throw new Exception(sprintf('Invalid $item array (%s)', serialize($item));
        }

        elseif (!array_key_exists('id', $item)) {
            throw new Exception(sprintf('Invalid $item[id] (%s)', serialize(item));
        }

        // Making a call to php function which returns bool
        //  No problem, we test for return value and throw exception accordingly
        if (!$this->dbo->insert($item)) {
            throw new Exception(sprintf('Row was not inserted (%s)', serialize($item));
        }

        // If we made it this far, we have successfully inserted a row
        //  And code resumes back up after call to this function was made
    }

Бросок исключений - лучший способ вернуть сообщение в вызывающий код, и он заставляет вызывающий код обрабатывать исключение. Обернув наш $dbo->insert($item) вызов в блок try / catch, мы можем перехватить исключение, записать его и перейти к следующему элементу в массиве.

0 голосов
/ 24 января 2012

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

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