наткнулся на
https://www.youtube.com/watch?v=cm64vkwzxl4
SMART TALKS: Dynamics AX мероприятие
что думаете о реализации класса UnitOfWork в Аксапте?
что думаете о реализации UnitOfWork по сравнению с InventSumDelta?
в комментариях к видео я написал:
паттерн
Unit of Work:
https://martinfowler.com/eaaCatalog/unitOfWork.html
полностью паттерн реализован в .net Entity Framework.
в аксапте достаточно ограниченная реализация.
основное преимущество не в многопоточной вставке, конечно.
основное преимущество в комбинации методов обновления и ЧТЕНИЯ (getByKey)
особенно когда записи обновляются несколько раз.
пример - inventTrans.costAdjustment обновляется каждый раз, когда происходит вставка в InventSettlement. по идее нужно делать inventTrans.update в базе каждый раз.
кроме того, есть InventSum, который нужно обновлять каждый раз как только изменяется/добавляется запись в InventTrans.
с Unit of work можно сделать алгоритм, который:
1. читает inventTrans из базы один раз.
2. обновляет в памяти
3. читает обновленную версию из памяти
4. в самом конце делает команду обновления в базу.
таким образом, сильно сокращается число обращений к базе. за счет этого и происходит оптимизация.
главная особенность:
getByKey читает запись из памяти, а если записи в памяти нет, то метод самостоятельно читает из базы.
за счет этого и достигается унификация алгоритма и щастье программиста.
особенности:
- unit of work имеет смысл использовать в рамках одной транзакции
- unit of work аксапты абсолютно не приспособлен для взаимодействия с bulk-операциями (хотя в .net этот паттерн взаимодействует с LINQ). unit of work в аксапте имеет смысл использовать в режиме "работа с отдельными записями".
- unit of work в аксапте абсолютно не приспособлен для работы с формами. по сути каждая форма сама по себе "умный" unit of work.
- в аксапте нет возможности управлять размером буфера unit of work. поэтому на огромных транзакциях типа закрытия склада класс unit of work может ухудшить ситуацию. Хотя именно для закрытия этот класс и создавался.
ну, и конечно Unit of Work в своем изначальном виде во внеаксаптовском мире часто используется как data source для unit test'ов.