AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.01.2017, 13:27   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Поговорим о Unit Of Work?
наткнулся на
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'ов.

Последний раз редактировалось mazzy; 23.01.2017 в 13:42.
Теги
unitofwork, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axmfg: Rounding up work for raw material picking to the nearest handling unit Blog bot DAX Blogs 0 20.01.2016 22:13
DynamicsAxSCM: WHS Work List Blog bot DAX Blogs 0 19.06.2015 15:11
DynamicsAxSCM: How to support a case picking operation using wave containerization in AX2012R3 Blog bot DAX Blogs 0 19.11.2014 16:11
axmfg: Replacing work order types for production output in CU8 Blog bot DAX Blogs 0 12.09.2014 18:12
axdaily: Unit of Work Blog bot DAX Blogs 4 05.05.2011 11:54

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:46.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.