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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.06.2015, 11:24   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от makbeth Посмотреть сообщение
Немного не по теме, но...
Я не понимаю, какой смысл писать Global::queryNotValue(...)? Если уж хочется указать класс, то проще сразу писать SysQuery::valueNot(..)? Короче и на один вложенный вызов меньше. А так смысл Global теряется совсем.
Как я понимаю, это скорее вопрос удобства.

Работа с Query - это довольно часто выполняемая операция. Как следствие, удобнее вынести эту обработку в общую "библиотеку" пользовательских функций Global, о которой "все знают", чем в специализированный класс SysQuery о котором еще надо "вспомнить"

На всякий случай напомню, что статические методы класса Global можно вызывать и без указания имени класса. Как системную функцию. Т.е. можно просто написать

queryNotValue(...)

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

Ну, и еще появляется возможность внести дополнительные параметры и обработки, не трогая класс SysQuery. Например, добавить второй параметр по аналогии с методом global::queryRangeConcat(), чтобы добавлять отрицание к уже существующему условию. Но это так, идет скорее дополнением (бонусом), чем причиной...
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 16.06.2015, 16:03   #2  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Работа с Query - это довольно часто выполняемая операция. Как следствие, удобнее вынести эту обработку в общую "библиотеку" пользовательских функций Global, о которой "все знают", чем в специализированный класс SysQuery о котором еще надо "вспомнить"
Проблема выноса подобных функций в Global в том, что Global в итоге превращается в помойку, где можно что-то очень долго искать, и... в конце концов действительно найти. ИМХО, Global - это место для расширения множества функций ядра, таких, как, например, расширения базовых функций работы со строками. Т.е. то, что не привязано к тому или иному специфическому функционалу.
Когда туда начинают сливать все подряд (ну а что, кому-нибудь пригодится же!), Global превращается не пойми во что с кучей непонятного и зачастую дублирующего друг друга функционала.
В итоге каждый раз начинаем искать то что нам подойдет:
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Это уже лично я пишу имя класса, чтобы не вспоминать точное название метода, а посмотреть в выпадающем списке после ввода двоеточий.


Мне кажется намного удобнее, когда вспомогательные функции именно для работы с запросами собраны в одном классе SysQuery, что в итоге значительно сужает область поиска. И другие такие примеры тоже есть, даже среди системных классов, например, DateUtil для utcdatetime или CLRInterop для работы с .NET. А есть еще, например, WinAPI/WinAPIServer

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Ну, и еще появляется возможность внести дополнительные параметры и обработки, не трогая класс SysQuery. Например, добавить второй параметр по аналогии с методом global::queryRangeConcat(), чтобы добавлять отрицание к уже существующему условию.
А почему его нельзя трогать?
За это сообщение автора поблагодарили: Raven Melancholic (2).
Старый 16.06.2015, 18:03   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от makbeth Посмотреть сообщение
Проблема выноса подобных функций в Global в том, что Global в итоге превращается в помойку, где можно что-то очень долго искать, и... в конце концов действительно найти.
(...)
Когда туда начинают сливать все подряд (ну а что, кому-нибудь пригодится же!), Global превращается не пойми во что с кучей непонятного и зачастую дублирующего друг друга функционала.
В итоге каждый раз начинаем искать то что нам подойдет:
Если в этой цитате заменить "Global" на "SysQuery" что-нибудь изменится? "Чисто (...) там, где не мусорят" (с)

Проблему дублирования кода и "превращение в помойку" заменой одного класса на другой не исправишь...

Цитата:
Сообщение от makbeth Посмотреть сообщение
ИМХО, Global - это место для расширения множества функций ядра, таких, как, например, расширения базовых функций работы со строками. Т.е. то, что не привязано к тому или иному специфическому функционалу.
Было бы желание... Кто мешает создать класс с именем, например "strFunction" или "sysFunction" и напихать именно в него все статические метода по работе со строками?

Цитата:
Сообщение от makbeth Посмотреть сообщение
Мне кажется намного удобнее, когда вспомогательные функции именно для работы с запросами собраны в одном классе SysQuery,
Как я уже говорил, вопрос удобства при частом использовании. Т.е. банально, вопрос личных предпочтений

Цитата:
Сообщение от makbeth Посмотреть сообщение
что в итоге значительно сужает область поиска.
Сомнительно... Помнить все классы просто не реально. Как правило, это кончается созданием личной библиотеки наиболее часто используемых "функций". Т.е. некой альтернативы класса Global, куда собираются "свои" статические методы.

Цитата:
Сообщение от makbeth Посмотреть сообщение
И другие такие примеры тоже есть, даже среди системных классов, например, DateUtil для utcdatetime или CLRInterop для работы с .NET. А есть еще, например, WinAPI/WinAPIServer
Гм... Сделайте поиск в классе Global по ключевым словам "DateTimeUtil", "CLRInterop", "WinAPI". Результат может Вас удивить

Кстати, в Ax2009 классы DateTimeUtil и CLRInterop являются системными и изменить их невозможно. Создавать отдельные классы для расширения их функциональности или все-таки методы Global?

Цитата:
Сообщение от makbeth Посмотреть сообщение
А почему его нельзя трогать?
Можно, конечно, только если работаешь с классом Global, то логично и изменения вносить в класс Global...
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 17.06.2015, 12:22   #4  
trudel is offline
trudel
Участник
 
52 / 10 (1) +
Регистрация: 17.04.2015
А ВОТ по теме еще помогите

inventDim1 = queryRunSub.get(tableNum('Dim1'));

как теперь получить таблицу именно InventDim которая Dim1 ?
Старый 17.06.2015, 12:27   #5  
trudel is offline
trudel
Участник
 
52 / 10 (1) +
Регистрация: 17.04.2015
Цитата:
Сообщение от trudel Посмотреть сообщение
А ВОТ по теме еще помогите

inventDim1 = queryRunSub.get(tableNum('Dim1'));

как теперь получить таблицу именно InventDim которая Dim1 ?
ИЗВИНИТе, нашел.
Старый 16.06.2015, 17:22   #6  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Это уже лично я пишу имя класса, чтобы не вспоминать точное название метода, а посмотреть в выпадающем списке после ввода двоеточий. Мне так удобнее
AxAssist очень помогает не вспоминать точное имя без добавления global::
Хотя согласен с makbeth что global часто превращается в помойку.
Теги
query, querybuildrange, queryvalue

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
QUERY - как присоединить одну таблицу к запросу несколько раз? Music DAX: Программирование 5 03.04.2015 12:11
Динамическое изменение прав доступа на одну таблицу DreamCreator DAX: Программирование 7 15.07.2009 16:31
Два DataSource на одну временную таблицу mou DAX: Программирование 4 22.03.2008 11:00
Разные права на одну таблицу coja DAX: Администрирование 3 24.03.2005 07:26
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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