За последние 24 часа нас посетили 129480 программистов и 6590 роботов. Сейчас ищут 2623 программиста ...

Шаблон проектирования Maker-Checker

Тема в разделе "Прочее", создана пользователем artoodetoo, 23 дек 2022.

  1. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    Хочу обсудить варианты реализации шалона Maker-checker на PHP+SQL. Когда изменения авторизует другой пользователь, имеющий на это право.

    Возьмем для определенности сущность Товар. На самом деле это может быть что угодно.

    Видится два варианта:
    а) В таблице товаров есть поле состояния, например enum('Pending', 'Approved', 'Declined'). Maker создает запись с с первым состоянием, Checker меняет статус.
    б) Есть отдельная таблица approvals в которой хранятся запросы на изменение. Новый объект может быть там в сериализованном виде. Maker добавляет туда запись, Checker создает объект из сериализованных данных. Ну ли отмечает отказ.

    Первый вариант вроде бы проще, но кое-что усложняет. Например уникальные ключи. Или сложно реализовать update а не create. А есть еще delete...
    Второй тоже не идеал. Сложно, например, управляться со связанными данными, пока записи нет в целевой таблице. Типа документ с табличной частью.

    В моей практике есть вариант Б. Пыхтим, но тащим. А как у вас? Буду благодарен за ссылки. Вот что я нашел в интернетах:
    Код (Text):
    1.  
    2. * https://en.wikipedia.org/wiki/Maker-checker
    3. * https://medium.com/hevo-data-engineering/building-a-maker-checker-system-with-audit-trail-8dd3ea9bf29d
    4. * https://www.youtube.com/watch?v=Jzt-y4JZbr4 + https://github.com/cjmellor/approval
    5. * https://www.quora.com/How-do-I-implement-Maker-Checker-Concept-in-Laravel-5-2
    --- Добавлено ---
    P.S. Богомерский форум превращает ссылку на ютуб во встроенный медиа. Я обиделся и сделал ссылки нетрансформируемыми )))
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    я бы комбинировал из этих двух... беря из каждого его сильные стороны
    мое предложение вариант в)

    в)
    - Создание - берется из а) ... то есть объект создается физически, со статусом для проверки и одобрения
    - Редактирование, берем из б) - добавляя измененный объект в отдельную таблицу, саму же изначальную запись не трогаем - но даем какой-то новый статус - типа "есть изменения на одобрении". При одобрении - заменяем объектом из таблицы, статус меняем на одобрен
    - Удаление, самому объекту новый статус "есть запрос на удаление" - при удалении удаляем физически

    как-то так...
     
    artoodetoo нравится это.