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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.10.2010, 16:02   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Префиксы-суффиксы. Какой инструмент лучше использовать чтобы избавиться от префиксов?
начало обсуждения здесь
Префиксы-суффиксы. Как лучше? Стоит ли избавляться от них?

итог обсуждения подвел Владимир Максимов

теперь следующий вопрос.

предположим, принято решение "избавиться от префиксов - идентификаторов разработчиков" (оставить только название модуля, как в стандартной аксапте. при этом не потерять уже существущие данные).

какой инструмент лучше использовать, чтобы избавиться от префиксов при уже существующих данных?

=================
я провел эксперимент, взял отдельно стоящий проект (не ссылающийся на другие объекты) и провел переименование объектов (с сохранением id, чтобы сохранились данные).

в некоторых свойствах, ссылки переименовались правильно (например, переименование типа корректно обрабатывается)
в некоторых свойствах, ссылки не переименовались (например, переименование menuItem приводит к тому, что кое-где они правильно переименовываются, а кое-где остаются прежними. Например, в свойстве таблицы FormRef)


Выявление подобных ошибок заняло достаточно большое время.
А самое главное - выявление подобных ошибок переименования оказалось делом нетривиальным. Глобальная компиляция проходит, а ошибка проявляется в runtime. Спасали рекомендации Best Practice при компиляции. Но и они не выявили всех случаев.

Ну и замена в разных местах кода - тоже достаточно муторное занятие.

============
я попробовал выгрузить проект в текстовый файл с сохранением идентификаторов, провести переименование там и загрузить проект обратно.

Во-первых, были глюки с сохранением идентификаторов. Не везде она их сохранила.
Во-вторых (и это главное) в результате переименования появились объекты с дублирующимися названиями (одинаковые таблицы, одинаковые поля, одинаковые формы).

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

============
Вопрос:
какой инструмент и какую методику вы бы использовали, если бы перед вами стояла задача "избавиться от префиксов - идентификаторов разработчиков"?

Заранее спасибо.
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 16:22   #2  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Нанять человечка пусть сидит долбит ручками
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
Старый 26.10.2010, 16:31   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
Нанять человечка пусть сидит долбит ручками
и такой вариант рассматривается.
вопросы - как именно "долбит"? и как проверить, что он "надолбил" без ошибок?
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 16:42   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
и как проверить, что он "надолбил" без ошибок?
Разработать сценарии тестирования. Для периодического выполнения тестов по разработанному сценарию тестирования можно нанять еще одного человека
Старый 26.10.2010, 16:49   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андре Посмотреть сообщение
Разработать сценарии тестирования.
Ок. Каков критерий полноты этих сценариев? Как убедиться, что в результате не появилось ошибок, если даже Рекомендации компилятора не дают гарантии?

===========
Так, ребяты, не надо меня убеждать, что это работа и за работу надо платить. Надо. Будет оплачена.

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

===========
Я спрашиваю, каков наиболее оптимальный способ?
(Один из возможных вариантов - не убирать префиксы, пусть проги мучаются с ними)
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 16:55   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Ок. Каков критерий полноты этих сценариев?
Покрытие всех возможных вариантов использования функционала на n%. Значение n вы выбираете сами в зависимости от ваших возможностей по организации тестирования и лояльности ваших клиентов (насколько они готовы терпеть возможные проблемы при ошибках).

Цитата:
Как убедиться, что в результате не появилось ошибок
В результате выполнения всех запланированных сценариев тестирования ожидаемый результат совпал с фактическим.

mazzy, ты ищешь простой и легкий путь, но его здесь не будет. Можно лишь растянуть эти затраты во времени используя рефакторинг.
Старый 26.10.2010, 17:01   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Ок, чуть более подробно и с живым примером. Прям сейчас я занимаюсь рефакторингом большого отчета, на который клиент заказал несколько фич, которые невозможно реализовать без изменения архитектуры отчета, а менять архитектуру без рефакторинга я просто не возьмусь.

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

Более простого способа я не вижу.
Старый 26.10.2010, 17:03   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андре Посмотреть сообщение
mazzy, ты ищешь простой и легкий путь, но его здесь не будет. Можно лишь растянуть эти затраты во времени используя рефакторинг.
Повторяю: Я ищу оптимальный способ. Я понимаю, что:

Оптимальный способ != Простой путь
Оптимальный способ != Легкий путь
Оптимальный способ != Малозатратный путь

Может хватит дисклаймеров и попыток агитации за советскую власть?

Каковы технические аспекты?
Какой инструмент и какую методику вы бы использовали для решения подобной задачи?

=============
Про постоянный и постепенный рефакторинг - понял.
Но вся беда в том, что с Аксаптой связана куча других базулек и сервисов.
Изменение структуры = изменение интерфейса. Что чревато.
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 17:05   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андре Посмотреть сообщение
Сценарием тестирования в моем случае является набор входных параметров, с которыми должен запускаться отчет и результаты, которые должны получиться в результате его запуска.
Пусть так.
А каковы должны быть входные параметры и проверочные результаты для задачи "корерктно изменить названия объектов"?

У меня честно - никаких идей.
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 17:08   #10  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Может хватит дисклаймеров и попыток агитации за советскую власть?
Прости, а за что я агитирую? Насчет методики, я подробно написал в предыдущем своем сообщении.

Цитата:
Пусть так.
А каковы должны быть входные параметры и проверочные результаты для задачи "корерктно изменить названия объектов"?
Опять же, это только мое мнение, но входные параметры и результаты зависят от функционала, в котором вы меняете префиксы. Изменение префиксов объектов ничем не отличается от прочего изменения кода.
Старый 26.10.2010, 17:12   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Во-вторых (и это главное) в результате переименования появились объекты с дублирующимися названиями (одинаковые таблицы, одинаковые поля, одинаковые формы).
В подобных случаях, думаю, логичнее префикс превратить в суффикс. Кроме того, как уже упоминалось, если имена совпадают - это повод пересмотреть логику использования объектов. Думаю, можно сделать такой сценарий:

1. Если удаление префикса не приводит к дублированию имен, то удаляем префикс
2. Если удаление префикса приводит к дублированию имен, то
2.1. Переносим префикс в конец имени делая из него суффикс
2.2. Сообщаем пользователю о возникшей коллизии, чтобы он пересмотре логику использования данного объекта

============================

Вообще-то, насколько я понимаю, в самом общем виде задача ставится так:

как переименовать объект, чтобы все ссылки на него также переименовались.

Как мне кажется, в общем случае, полностью автоматическими средствами этого не сделать. Далеко не все ссылки на объект можно изменить автоматически. Например, в коде метода. Т.е., в общем случае, часть ссылок будет переименована автоматически, но останется некая часть, которую придется выискивать и переименовывать вручную. Вопрос только в пропорциях.

Лично я сделал бы следующее:

1) Перекрестные ссылки. Где используется объект.
2) Поиск по тексту внутри методов на случай, например, прямых SQL-запросов к серверу или обращение через _args.caller()
3) Дополнительный Job для поиска по свойствам, которые не учитываются в перекрестных ссылках и не могут быть найдены по тексту метода или средствами стандартного поиска (не знаю, FormRef, например, стандартный поиск найдет?)

Фиксирую все найденные места использования. Переименовываю объект и повторяю цикл для нового имени. Далее сравниваю полученные списки использования и вручную корректирую те места, где "автомат" не справился.

==========================

Возможно, лучшей стратегией было бы дать умереть таким объектам своей смертью. Т.е. создавать новые объекты и переливать в них данные из старых.
За это сообщение автора поблагодарили: mazzy (2).
Старый 26.10.2010, 17:15   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андре Посмотреть сообщение
Опять же, это только мое мнение, но входные параметры и результаты зависят от функционала, в котором вы меняете префиксы. Изменение префиксов объектов ничем не отличается от прочего изменения кода.
Отличается.
Некоторые вещи влияют только на интерфейс.
Как проверить что не отвалилась функция перехода к основной таблице?
(я же писал, что свойство FormRef не изменяется при изменении menuITem)

Я понимаю, что критерии должны быть такими же как и для обычного кода:
1. компиляция должна проходить без ошибок
2. на 4ом уровне предупреждений не должно быть рекомендаций компилятора (по заранее выбранному набору рекомендаций)

но эти критерии не отлавливают всех возможных ошибок, связанных с переименованием объектов.

в связи с этим:
= (повторюсь) какую методику вы бы выбрали для решения данной задачи?
= как проверить, что работа выполнена корректно и полностью? каковы критерии?
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 17:21   #13  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
mazzy, по-моему ты меня просто не слышишь. Нет технических возможностей отловить все эти ошибки и поэтому в твоем сценарии должно быть явно указан перечень полей, по которым должен работать переход к основной таблице и должен быть человек, который все это проверит.

Это можешь быть ты сам, это может быть твой сотрудник, это может быть представитель клиента, которым будет постфактум сваливать вам все замечания.

Если интересует именно техническое решение, то я в подобных случаях просто выгружаю весь AOT в xpo и поиском по нему анализирую все места, где используется изменяемый элемент. Мне этот способ кажется надежнее перекрестных ссылок.
Старый 26.10.2010, 17:21   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
В подобных случаях, думаю, логичнее префикс превратить в суффикс.
можно и так

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Вообще-то, насколько я понимаю, в самом общем виде задача ставится так:

как переименовать объект, чтобы все ссылки на него также переименовались.
ага.


Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Как мне кажется, в общем случае, полностью автоматическими средствами этого не сделать. Далеко не все ссылки на объект можно изменить автоматически. Например, в коде метода.
про код - понятно.
у меня конечно были надежды на синтаксическое переименование... но что-то мне совсем не понравилось как оно работает. может чего не понимаю.


Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Т.е., в общем случае, часть ссылок будет переименована автоматически, но останется некая часть, которую придется выискивать и переименовывать вручную. Вопрос только в пропорциях.
Ага.

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Лично я сделал бы следующее:

1) Перекрестные ссылки. Где используется объект.
2) Поиск по тексту внутри методов на случай, например, прямых SQL-запросов к серверу или обращение через _args.caller()
3) Дополнительный Job для поиска по свойствам, которые не учитываются в перекрестных ссылках и не могут быть найдены по тексту метода или средствами стандартного поиска (не знаю, FormRef, например, стандартный поиск найдет?)
Перекрестные ссылки - найдут.
Поиск - только расширенный по свойствам, а не по методам.


Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Фиксирую все найденные места использования.
Вручную?!

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Переименовываю объект и повторяю цикл для нового имени. Далее...
Т.е. рекомендуешь итерационный подход? когда имена меняются один за другим.
В принципе я склоняюсь к этому же.

Но все равно - может быть есть какой-то пакетный способ? Вдруг таки есть серебряная пуля, которая позволит "полтора ведра зелена вина одним махом"?

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Возможно, лучшей стратегией было бы дать умереть таким объектам своей смертью. Т.е. создавать новые объекты и переливать в них данные из старых.
Э-э-э... Не одна Аксапта, не одна. Она даже не центр вселенной.
Она всего лишь одна из баз. Связанная с кучей сервисов.
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 17:25   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андре Посмотреть сообщение
mazzy, по-моему ты меня просто не слышишь.
Мне ж тоже нужно время, чтобы написать сообщение.
Некоторые сообщения я не вижу, когда начинаю отвечать.

Цитата:
Сообщение от Андре Посмотреть сообщение
Нет технических возможностей отловить все эти ошибки и поэтому в твоем сценарии должно быть явно указан перечень полей, по которым должен работать переход к основной таблице и должен быть человек, который все это проверит.

Это можешь быть ты сам, это может быть твой сотрудник, это может быть представитель клиента, которым будет постфактум сваливать вам все замечания.
э-э-э...
Я б повесился, если бы был программистом и мой начальник дал бы мне такое задание.
Я б кричал и топал ногами, если бы я был пользователем и мне бы такое всучили.
Другого способа точно нет?

Цитата:
Сообщение от Андре Посмотреть сообщение
Если интересует именно техническое решение, то я в подобных случаях просто выгружаю весь AOT в xpo и поиском по нему анализирую все места, где используется изменяемый элемент. Мне этот способ кажется надежнее перекрестных ссылок.
интересная мысль. А почему так надежнее?
Можно просто мысли, чтобы хоть понять куда рыть.
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 17:30   #16  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Я б повесился, если бы был программистом и мой начальник дал бы мне такое задание.
Ну, это может быть консультант стажер. Это может быть вообще человек нанятый со стороны, не знающий Аксапты, ни имеющий элементарные навыки работы с компьютером и достаточно внимательный и ответственный. При этом я подразумеваю, что план тестирования составляешь ему ты сам.

Цитата:
интересная мысль. А почему так надежнее?
Динамический код, насколько я помню, перекрестные ссылки не покажут. Зависимости по иерархии наследования, когда ты меняешь код одного класса, а ошибка происходит при вызове наследника или предка.

Ну и просто вопрос привычки - я привык работать в emacs, а там анализ кода делать очень удобно.
Старый 26.10.2010, 18:08   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андре Посмотреть сообщение
Ну, это может быть консультант стажер.
Можно я повторю? "Я б повесился, если бы..."
Кончай меня агитировать за советскую власть.

Цитата:
Сообщение от Андре Посмотреть сообщение
При этом я подразумеваю, что план тестирования составляешь ему ты сам.
Как должен выглядеть этот план?
Можно я повторю? "У меня честно - никаких идей."

Цитата:
Сообщение от Андре Посмотреть сообщение
Ну и просто вопрос привычки - я привык работать в emacs, а там анализ кода делать очень удобно.
Этот? http://ru.wikipedia.org/wiki/Emacs
А как?
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2010, 19:08   #18  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Владимир Максимов
Возможно, лучшей стратегией было бы дать умереть таким объектам своей смертью. Т.е. создавать новые объекты и переливать в них данные из старых.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Э-э-э... Не одна Аксапта, не одна. Она даже не центр вселенной.
Она всего лишь одна из баз. Связанная с кучей сервисов.
Хм... Но ведь если ты будешь переименовывать объекты Axapta, то другие сервисы все-равно должны измениться. Под эти новые имена. И какая разница, останутся ли в Axapta старые имена или нет?
За это сообщение автора поблагодарили: mazzy (2).
Старый 26.10.2010, 19:56   #19  
AX2011
Гость
 
n/a
Цитата:
Сообщение от mazzy Посмотреть сообщение
Спасали рекомендации Best Practice при компиляции. Но и они не выявили всех случаев.
Можно идентифицировать все возможные ошибки и включить проверку на их наличие в классы бест практисес - SysBPCheck*
Старый 26.10.2010, 21:10   #20  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Кончай меня агитировать за советскую власть.
Процесс агитации всегда подразумевает какую-то цель. У меня этой цели нет. Ты спросил кто как делает - я описал схему по которой я работаю. Не нравится - придумай свою.

Цитата:
Этот? http://ru.wikipedia.org/wiki/Emacs
А как?
Да, этот. Его фишка в том, что он очень расширяем за счет метапрограммирования на диалекте Lisp, благодаря чему его можно заточить под решение своих задач, взяв за основу решения для имеющихся языков программирования (я шел от java, хотя теперь мне кажется это не оптимальным решением).
За это сообщение автора поблагодарили: mazzy (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Что лучше, много номенклатур или много конфигураций? axvrp DAX: Функционал 75 21.09.2010 16:13
WebForms - какой контрол использовать GromRom DAX: Программирование 3 09.07.2008 16:20
Как использовать dimension sets (DAX 4.0) Qaz Qwerty DAX: Функционал 9 19.05.2008 21:08
Какой сканер штрихкодов брать и у кого? Hidden DAX: Администрирование 5 01.11.2005 10:30
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:15.