Должен ли получатель возвращать «или ноль», даже если значение в базе данных не обнуляется? - PullRequest
0 голосов
/ 14 октября 2019

У меня есть таблица, содержащая SMS-сообщение с подтверждением, и у меня есть последний отправленный столбец и столбец количества попыток. Таким образом, в базе данных они не обнуляются, но при создании сущности в коде значения изначально равны нулю, поэтому я долженвызовите установщики перед получателями и заставьте получателей вернуть правильное значение (возвращает DateTime, возвращает int) или сделайте возвращение получателя или значение NULL, даже если значение в базе данных не может быть обнуляемым (этот вопрос о передовой практике)

это нормально, если это

getNumberOfTries(): ?int

или это должно быть строго

getNumberOfTries(): int

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

1 Ответ

0 голосов
/ 14 октября 2019

Это действительно вопрос мнения.

Вот PHP DOC BLOCK, который вышел из моего ORM. Это часть большого автоматически сгенерированного кода ORM. Я написал код из дампа MySQL, используя скрипт php. Программа PHP ORM

/**
    * 
    *   $argv = [
    *       'select' => [
    *                          '*column name array*', 'etc..'
    *        ],
    *
    *       'where' => [
    *              'Column Name' => 'Value To Constrain',
    *              'Defaults to AND' => 'Nesting array switches to OR',
    *              [
    *                  'Column Name' => 'Value To Constrain',
    *                  'This array is OR'ed togeather' => 'Another sud array would `AND`'
    *                  [ etc... ]
    *              ]
    *        ],
    *
    *        'pagination' => [
    *              'limit' => (int) 90, // The maximum number of rows to return,
    *                       setting the limit explicitly to 1 will return a key pair array of only the
    *                       singular result. SETTING THE LIMIT TO NULL WILL ALLOW INFINITE RESULTS (NO LIMIT).
    *                       The limit defaults to 100 by design.
    *
    *              'order' => '*column name* [ASC|DESC]',  // i.e.  'username ASC' or 'username, email DESC'
    *
    *
    *         ],
    *
    *   ];
    *
    *
    * @param array &$return
    * @param string|null $primary
    * @param array $argv
    * @return bool
    */
 public static function Get(array &$return, string $primary = null, array $argv) : bool
{
... SEE LINK ...
}

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

В вашем случае, если бы я был вынужден создать метод, подобный представленному, я бы не дал значение Nullable. Я бы предположил, что данные были успешно возвращены из БД, и если бы это не было INT, я бы пошел вперед и сделал бы его 0. Я бы выбрал эту опцию, потому что это означает меньше проверки типов в вызывающих функциях. Если бы null должен был символизировать что-то еще, я мог бы увидеть причину, разрешив :? Bool . Однако я надеюсь, что с помощью приведенного выше фрагмента кода вы сможете найти лучшую альтернативу для ORM.

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

...