31.01.2012, 12:00 | #1 |
Участник
|
Служебные строковые константы в метках
Разбираю код в 2009-й аксапте.
то и дело в разных местах встречаю примеры когда при построении запросов, при формировании строки в QueryBuildRange.value() используются метки. Например вместо запятой ставят "@SYS35667", вместо '%1' тоже какую-то метку. Это то зачем делать ? BP поменяли ? Мне казалось, что в метки надо выносить только текстовые строки, зависимые от языка. Во всех остальных случаях надо использовать константы или макроопределения. Иначе код становится хуже читаем и легко нарушить его работу кривой меткой. Метки должны только на интерфейс влиять, а не на логику работы. |
|
31.01.2012, 12:14 | #2 |
Administrator
|
Вероятнее всего, сделано так из-за обычного непонимания сути 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 |
Ищущий знания...
|
Цитата:
Сообщение от Logger
Разбираю код в 2009-й аксапте.
то и дело в разных местах встречаю примеры когда при построении запросов, при формировании строки в QueryBuildRange.value() используются метки. Например вместо запятой ставят "@SYS35667", вместо '%1' тоже какую-то метку. Это то зачем делать ? BP поменяли ? Мне казалось, что в метки надо выносить только текстовые строки, зависимые от языка. Во всех остальных случаях надо использовать константы или макроопределения. Иначе код становится хуже читаем и легко нарушить его работу кривой меткой. Метки должны только на интерфейс влиять, а не на логику работы. Мне кажется это просто какой то либо не очень опытный, либо с какими то своими взглядами программист, которому когда сказали: "Везде в аксапте используй метки!"... Вот он их и стал везде использовать
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
31.01.2012, 12:18 | #4 |
Участник
|
Я бы не исключал возможности использования какого-нить инструмента, который везде заменяет строку на метку
Самим приходилось такое писать, когда клиенту "срочно" понадобилось перейти на разработку с метками.
__________________
Ivanhoe as is.. |
|
31.01.2012, 12:23 | #5 |
Axapta
|
Всего лишь примеры для The daily Axapta WTF. Собственно EVGL тот топик начал с примера на по сути такую же тему. На русском это называется "Научи дурака богу молиться...".
|
|
31.01.2012, 17:35 | #6 |
Участник
|
Я думаю, что некоторую "помощь" в появление таких меток вносит именно что новая версия Best Practiсes, которая настоятельно рекомендует использовать двойные кавычки только для обрамления меток, но ни в коем случае не текстовых констант. Точнее, конечно, не сама по себе "рекомендация", а запускаемая проверка на соответствие рекомендациям.
Это надо еще "догадаться" заменить двойные кавычки на одинарные, чтобы проверка на соответствие рекомендациям не ругалась на такие места. Ведь текст рекомендации откровенно подталкивает к созданию метки. Как мне кажется, здесь просто перестарались "проверяльщики". В смысле, авторы кода "Проверка на соответствие рекомендациям". Когда слишком хорошо - это уже не хорошо PS: Метки сами по себе "ухудшают читаемость кода". Вне зависимости от содержания. Впрочем, это скорее вопрос привычки... Кроме того, не вижу каким образом подобные метки могут повлиять на логику работы. Вы что, пишите код, который делает ветвление кода в зависимости от текста? Как мне кажется, максимум, у Вас будет "кривой" текст чего-либо, но лигика работы от этого не пострадает никак.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
31.01.2012, 18:37 | #7 |
Участник
|
Цитата:
Если метки использовать в качестве разделителя "," или заменителя "%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 |
Участник
|
А... Вот Вы про что! Да. Был не внимателен. Я так понял, Вы были возмущены именно содержимым метки, а не способом ее применения.
Между прочим, метод SysQuery::valueNot() написан точно также. Разве что, использованы одинарные кавычки и, как следствие, проверка на соответствие рекомендациям не настивает на том, что текст надо заменить меткой. Т.е. еще раз косвенно подтверждается "вина" слишком хорошей проверки. Я так понимаю, что изначально была "тупо" написана текстовая константа в двойных кавычках, а когда запустили проверку на соответствие рекомендациям, то получили рекомендацию оформить текстовую константу как метку. Ну, и получили, то, что имеем PS: Каким образом можно неправильно "перевести" запятую или восклицательный знак - не понимаю Как "потерять" меточный файл, тоже плохо представляю. Нет, теоретически, конечно, все возможно, только, по-моему, проблема несколько надуманная .
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
Теги |
метки |
|
Похожие темы | ||||
Тема | Ответов | |||
Строковые ресурсы | 3 | |||
как вытаскивать константы из библиотеки типов? | 3 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|