Changes between Version 4 and Version 5 of Ticket #874, comment 15


Ignore:
Timestamp:
Dec 28, 2022, 7:53:03 PM (2 years ago)
Author:
alx

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #874, comment 15

    v4 v5  
    4646Отличие "прошел ОТК" и "отгружается" в том, что в состоянии "отгружается" в состав заказа уже не могут вноситься никакие изменения. Если же состояния "отгружается" нет, то получается, что в состав заказа нельзя вносить изменения в состоянии "прошел ОТК", что не очень удобно, так как в это состояние заказ может попасть автоматически, как только на складе набрали нужные платы...
    4747
    48 Далее. Мне в предложенной схеме не нравится, что часть состояний ("создан", "скомплектован", "проверен" и "прошел ОТК") формируется автоматически (то есть зависит только от состояния составляющих заказ изделий), а часть (точнее, одно - "отгружен") - присваиваются пользователями. Зачем хранить в таблице значение, которое является агрегацией состояний составляющих заказ изделий? ИМХО лучше хранить в заказе только поле-флаг "отгружен", а остальные состояния вычислять каждый раз по мере необходимости - это позволит избежать потенциальных неконсистентных состояний, когда записанное в таблице состояние не соответствует состояниям составляющих заказ изделий (например в результате бага)...
    49 
    50 Например если состояния изделий кодируются как 0 (не проверено), 1 (проверено, не прошло ОТК) и 2 (прошло ОТК), то состояние всего заказа в целом легко получается простым MIN(itemState)...
     48Далее. Мне в предложенной схеме не нравится, что часть состояний ("создан", "скомплектован", "проверен" и "прошел ОТК") формируется автоматически (то есть зависит только от состояния составляющих заказ изделий), а часть (точнее, одно - "отгружен") - присваиваются пользователями. Зачем хранить в таблице значение, которое является агрегацией состояний составляющих заказ изделий? ИМХО лучше хранить в таблице `orders` только поле-флаг "отгружен", а остальные состояния вычислять каждый раз по мере необходимости - это позволит избежать потенциальных неконсистентных состояний, когда записанное в таблице состояние не соответствует состояниям составляющих заказ изделий (например в результате бага). Например если состояния изделий кодировать как 0 (не проверено), 1 (проверено, не прошло ОТК) и 2 (прошло ОТК), то состояние всего заказа в целом легко получается простым MIN(itemState)...
    5149
    5250И еще, разве манипуляции с заказом (создание, комплектация, отгрузка) не должны сопровождаться записями в историю? В описании ничего не сказано о том, какие именно события должны фиксироваться. А ведь менеджер (или даже покупатель) может захотеть узнать не только текущее состояние заказа, а например, когда заказ переходил из одного состояния в другое...