пятница, 10 августа 2007 г.

15. System Classes \ The Global Class

(последнее обновление: 10.08.07)
(основной перевод: 10.08.07)


Класс Global

Класс Global в своем исходном виде содержит около 250 статических методов. Каждый из этих методов можно считать дополнением к встроенным функциям языка X++. Обычно при обращении к статическому методу какого-либо класса в X++ необходимо использовать следующий синтаксис:
ClassName::methodName(...);
Однако, компилятор обрабатывает методы класса Global особым образом, что позволяет убрать ссылку на имя класса. Следующие две строки означают одно и то же:
Global::info(...);
info(...);
Метод info класса Global обычно используется для вывода информационных сообщений в форму Infolog.

Вышеупомянутая особенность компилятора может сделать код X++ более читабельным. Если вы обнаруживаете, что ссылаетесь на один и тот же метод из многих мест программы или неоднократно реализуете одну и ту же тривиальную функциональность, то вам следует подумать о добавлении новых методов в класс Global.

В Dynamics AX 4.0 в класс Global добавлен показанный ниже метод strStartsWith:
static boolean strStartsWith(str _string, str _potentialStart)
{
if (substr(_string, 1, strlen(_potentialStart)) == _potentialStart)
return true;
return false;
}
Этот метод подходит для класса Global, поскольку он в целом полезен и поскольку он скрывает несущественные детали реализации определения того, начинается ли одна строка с заданной другой. Если в дальнейшем потребуется внести изменения (например, появится более быстрый алгоритм), то нужно будет изменить только этот один-единственный метод, который инкапсулирует детали реализации, а не все места в программе, где встречается вызов этого метода. Такая инкапсуляция также делает код X++ проще, позволяя вам сосредоточиться на проблеме более высокого уровня, а не на низкоуровневых деталях реализации.

Чтобы определить, стоит ли помещать метод в класс Global или ему лучше подойдет другой класс, вы должны рассмотреть контекст, обеспечиваемый указыванием имени класса. Если метод будет помещен в Global, то этот контекст будет теряться из-за отсутствия имени класса. Другие классы, такие, например, как SysDictClass и WinApi, также имеют набор статических методов. Рассмотрим контекст, обеспечиваемый указыванием имени класса в этих двух случаях:
WinApi::getTickCount();
SysDictClass::as(...);
В первом примере ссылка на WinApi сообщает разработчику, что этот метод использует возможности, доступные через Microsoft Windows API. Во втором примере SysDictClass говорит о функциональности, относящейся к рефлексии классов. Эта информация будет утрачена, если методы getTickCount и as будут помещены в класс Global.

Вы должны также предусмотреть простоту обнаружения (discoverability) ваших методов. Когда вы помещаете метод в Global, программист не сможет воспользоваться преимуществами функции IntelliSense, до тех пор пока он или она явно не напишет название класса Global; в этом случае несколько пострадает читабельность, если имя самого класса будет оставлено перед именем метода в написанном исходном коде. Если же вы поместите ваш метод в класс, к которому он логически подходит, программисту необходимо будет знать только о существовании такого класса. И далее он сможет перейти к нему при необходимости. Большинство опытных X++ разработчиков осведомлены о классе WinApi. Очень немногие, если вообще кто-нибудь, знают все 250 методов класса, да это и не нужно.

Если вы все еще обучаетесь языку X++, то вам следует регулярно просматривать класс Global в поисках полезных методов, которые позволят упростить вашу работу. Встроенные функции X++ дополняют методы класса Global, совместно предоставляя разработчику обширный набор функций общего назначения. Список всех встроенных функций X++ вы сможете найти в AOT в узле System Documentation\Functions.

Класс Global также является специальным классом и поэтому располагается конце списка классов в AOT наряду с глобальными классами сеанса, рассмотренными в предыдущем разделе.

Комментариев нет: