Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Обработка кастомных типов с уведомлением об успешности транзакции #60

Open
bratchikov opened this issue Sep 23, 2019 · 7 comments
Assignees
Milestone

Comments

@bratchikov
Copy link
Member

Цель

Кастомные типы, которые используют те или иные ресурсы нуждаются в получении информации о результате записи в БД: успешно или нет.

Функциональные требования

Требуется разработать интерфейс для кастомных типов в дополнение к интерфейсу из #59 для поддержки вызова методов, фиксирующих результат выполнения операции в БД.

Требования к реализации

Нужно несколько методов:

  • Метод, который вызовется непосредственно перед выполнением транзакции (все БСы уже сработали)
  • Метод, который вызовется в случае успешного завершения транзакции
  • Метод, который вызовется в случае неуспешного завершения транзакции

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

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

Исходный код

Этот репозиторий, сделать feature-ветку от develop.

Документация

Добавить статью в документацию (issue без статьи не закрывать)

Тесты

Реализовать тесты.

Примерная оценка трудоёмкости

16ч.

@mao29
Copy link

mao29 commented Oct 10, 2019

Помимо информации об объекте данных нужно еще видимо получать имя поля, для которого срабатывает метод.

@mao29
Copy link

mao29 commented Oct 10, 2019

Из такой постановки мало понятно с какого места и в какую сторону начинать копать. Предлагаю добавить ссылки на конкретные файлы ОРМ, где требуется добавить эту функциональность.

@mao29
Copy link

mao29 commented Oct 10, 2019

Абзац про специальные массивы и словари не понял.

@mao29
Copy link

mao29 commented Oct 10, 2019

А почему предлагается дополнительный интерфейс сделать, а не дополнить тот, что в рамках #59 предполагается разработать? Есть сценарий как их по-отдельности использовать? Или просто во имя SRP?

@bratchikov bratchikov added this to the 5.2 milestone Oct 27, 2019
@NicholasNoise
Copy link
Contributor

NicholasNoise commented Oct 30, 2019

В текущей реализации сервиса данных это всё очень похоже на принцип взаимодействия с сервисом аудита:
перед выполнением query-запросов (link)
после всех query-запросов (link)
в случае исключения выполнения любого query-запроса (link)

@NicholasNoise
Copy link
Contributor

NicholasNoise commented Oct 30, 2019

Данный интерфейс может быть реализован как кастомным типом (например, GeoData), так и наследником от DataObject?
Первое может быть использовано для реализации логики сохранения сложных типов, объекты которых хранятся распределённо - метаданные в БД, а контент - в ином месте, который можно получить по метаданным.
Второе - для реализации логики оповещения об изменении объекта данных.

Между этими вариантами есть отличие в контексте методов из интерфейса:
1 - тройка (DataObject,PropertyName,PropertyValue)
2 - только (DataObject), т.к. PropertyName = null, а PropertyValue совпадает с DataObject.

@NicholasNoise
Copy link
Contributor

Под специальными массивами, вероятно, Игорем подразумевалась некая коллекция всех экземпляров классов, которые реализуют создаваемый интерфейс. Такую коллекцию необходимо будет сформировать перед или во время выполнения Метод0, чтобы позднее переиспользовать в Метод1 или Метод2.

@bratchikov bratchikov assigned bratchikov and unassigned leoleopon Jan 13, 2020
@bratchikov bratchikov modified the milestones: 5.2, 5.1 Jan 13, 2020
@bratchikov bratchikov modified the milestones: 5.1, 7.0 Aug 9, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants