Покупки, как частный случай действия

Когда-то очень давно, мы стали хранить совершенные покупки потребителей (оно же факты активации кодов). При этом отдельно при каждой активации кода потребителем мы учитывали этот факт в действиях (т. е. у потребителя было две записи — одна в действиях, что он поучаствовал в каком-то промо и вторая — факт совершения покупки (оно же активация кода)). При этом исторически сложилось так, что явной связи между действием и покупкой не было — просто была совершенно отдельно пачка действий и отдельно — пачка покупок.
Конечно, мы в голове (и отчетах клиенту), всегда держали взаимосвязь между действиями и покупками, но технически это было не очень верно. Это (что покупка является частным случаем действия) стало видно в последнее время, когда мы усиленно стали приводить систему к реалиям предметной области — выделение понятия шаблона действия, категоризации действий и пр. — поэтому было принято волевое решение явно связать покупки и выданные при этих покупках действия.
Подобная реализация очень хорошо ложится на предметную область (например, аналогичная реализация имеется создании OneToOne действий, где надо хранить не только место и время действия, а еще некоторую дополнительную информацию, специфическую для шаблона OneToOne). Так и с покупками — мы теперь храним факт совершения действия и некоторую дополнительную специфическую информацию — код, продукт, механику активации кодов и пр.)
Теперь у каждой покупки есть ровно одно связанное с ней действие. Покупка больше не хранит свои собственные значения потребителя, служебного персонала, даты-времени, точки контакта и бренда — эти данные берутся из действия.
Набор имеющихся фильтров соответствующим образом изменён:
  • Вместо фильтрации потребителей по покупкам теперь производится фильтрация потребителей по действиям об этих покупках, а у фильтра по действиям появился вложенный фильтр по соответствующей покупке.
  • Вместо фильтрации покупок по дате (и т. п.) теперь производится фильтрация покупок по соответствующим действиям, которые фильтруются по дате (и т. п.).
Все существующие ссылки фильтры автоматически трансформируются в новые.
Например:
Фильтрация потребителей по покупкам.
Было (фильтры по действиям и покупкам отдельно друг от друга):
Фильтрация потребителей по покупкам было
Стало (фильтр по покупкам «вложен» в фильтр по действиям):
Фильтрация потребителей по покупкам стало
Фильтр по покупкам.
Было:
Фильтр по покупкам было
Стало:
Фильтр по покупкам стало
Отображении информации на странице списка покупок не изменилось, но возможно изменится после накопления опыта работы с новой структурой.
Моника одобряет ).
Моника

Вас заинтересуют следующие материалы