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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.01.2012, 12:00   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Служебные строковые константы в метках
Разбираю код в 2009-й аксапте.
то и дело в разных местах встречаю примеры когда при построении запросов, при формировании строки в QueryBuildRange.value() используются метки.

Например вместо запятой ставят "@SYS35667", вместо '%1' тоже какую-то метку.
Это то зачем делать ?
BP поменяли ?

Мне казалось, что в метки надо выносить только текстовые строки, зависимые от языка. Во всех остальных случаях надо использовать константы или макроопределения. Иначе код становится хуже читаем и легко нарушить его работу кривой меткой. Метки должны только на интерфейс влиять, а не на логику работы.
Старый 31.01.2012, 12:14   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Вероятнее всего, сделано так из-за обычного непонимания сути BP. AX становится всё более массовым продуктом, армия программистов растёт. Логично, что качество кода (в том числе и стандартного) в связи с этим падает. Привыкайте.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 31.01.2012, 12:14   #3  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Разбираю код в 2009-й аксапте.
то и дело в разных местах встречаю примеры когда при построении запросов, при формировании строки в QueryBuildRange.value() используются метки.

Например вместо запятой ставят "@SYS35667", вместо '%1' тоже какую-то метку.
Это то зачем делать ?
BP поменяли ?

Мне казалось, что в метки надо выносить только текстовые строки, зависимые от языка. Во всех остальных случаях надо использовать константы или макроопределения. Иначе код становится хуже читаем и легко нарушить его работу кривой меткой. Метки должны только на интерфейс влиять, а не на логику работы.
Жуть какая...
Мне кажется это просто какой то либо не очень опытный, либо с какими то своими взглядами программист, которому когда сказали: "Везде в аксапте используй метки!"... Вот он их и стал везде использовать
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 31.01.2012, 12:18   #4  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Я бы не исключал возможности использования какого-нить инструмента, который везде заменяет строку на метку
Самим приходилось такое писать, когда клиенту "срочно" понадобилось перейти на разработку с метками.
__________________
Ivanhoe as is..
Старый 31.01.2012, 12:23   #5  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Всего лишь примеры для The daily Axapta WTF. Собственно EVGL тот топик начал с примера на по сути такую же тему. На русском это называется "Научи дурака богу молиться...".
Цитата:
Сообщение от EVGL Посмотреть сообщение
Из творчества программистов датской компании Munk IT:
X++:
void Munk_NoteMark()
{
    MenuFunction menuFunction;
    Args         args = new Args();
    ;
    menuFunction = new MenuFunction('@NEO258', MenuItemType::Display);
    args.caller(this);
    menuFunction.run(args);
}
@NEO258: DocuView
Старый 31.01.2012, 17:35   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Я думаю, что некоторую "помощь" в появление таких меток вносит именно что новая версия Best Practiсes, которая настоятельно рекомендует использовать двойные кавычки только для обрамления меток, но ни в коем случае не текстовых констант. Точнее, конечно, не сама по себе "рекомендация", а запускаемая проверка на соответствие рекомендациям.

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

Как мне кажется, здесь просто перестарались "проверяльщики". В смысле, авторы кода "Проверка на соответствие рекомендациям". Когда слишком хорошо - это уже не хорошо


PS: Метки сами по себе "ухудшают читаемость кода". Вне зависимости от содержания. Впрочем, это скорее вопрос привычки...

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

Как мне кажется, максимум, у Вас будет "кривой" текст чего-либо, но лигика работы от этого не пострадает никак.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 31.01.2012, 18:37   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Кроме того, не вижу каким образом подобные метки могут повлиять на логику работы. Вы что, пишите код, который делает ветвление кода в зависимости от текста?
Я - не пишу Если вы внимательно прочитали тему

Если метки использовать в качестве разделителя "," или заменителя "%1" при наложении фильтра при построении кверей, то функциональность системы может нарушиться при переводе или при отсутствии меток.

А не должна.

P.S.
см. например :
\Classes\RLedgerSheetEngine_TurnoverBalance\originalDocuments
X++:
range.value(strfmt("@FAV2145", SysQuery::value(LedgerPostingType::TransferOpeningClosing)));
Почему бы не написать просто :
X++:
range.value(SysQuery::valueNot(LedgerPostingType::TransferOpeningClosing));
Если нет меточного файла или не так перевели или еще чего, то оборотка отваливается.
Старый 31.01.2012, 19:31   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
А... Вот Вы про что! Да. Был не внимателен. Я так понял, Вы были возмущены именно содержимым метки, а не способом ее применения.

Между прочим, метод SysQuery::valueNot() написан точно также. Разве что, использованы одинарные кавычки и, как следствие, проверка на соответствие рекомендациям не настивает на том, что текст надо заменить меткой. Т.е. еще раз косвенно подтверждается "вина" слишком хорошей проверки.

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

PS: Каким образом можно неправильно "перевести" запятую или восклицательный знак - не понимаю Как "потерять" меточный файл, тоже плохо представляю. Нет, теоретически, конечно, все возможно, только, по-моему, проблема несколько надуманная .
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Теги
метки

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Строковые ресурсы AlexeyVS DAX: Программирование 3 31.05.2010 18:10
как вытаскивать константы из библиотеки типов? Prof DAX: Программирование 3 21.10.2002 15:36

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

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

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