Мы используем OOP Perl в качестве языка программирования для разработки этой среды, поэтому этот альго-подобный код написан на Perl.
Мы разрабатываем среду автоматизации в OOP Perl для устройства конечной точки.Это конечное устройство предоставляет интерфейс HTTP, Telnet и SSH для выполнения определенного набора команд.Для простоты мы можем предположить, что все команды поддерживаются всеми тремя интерфейсами подключения, генерируя одинаковый вывод для данной команды.
В соответствующем классе Соединения записана функция для обработки конкретной команды.например,
sub getVersion {
return $http->sendCommand('version');
}
Но текущая реализация вызова такой функции немного, но отличается.Предположим, мы хотели бы вызвать функцию getVersion, тогда она будет вызываться примерно так:
$device->getVersion(); //This is called through device object rather than connection object.
, поскольку эта функция не определена в классе устройств, вызывается AUTOLOAD.В классе Device AUTOLOAD реализован следующим образом:
sub AUTOLOAD {
my $connection = $device->getConnection();
return $connection->$methodName (..); // when called for getVersion, $methodName will become the "getVersion"
}
Пожалуйста, дайте мне знать, если это хорошая практика для его реализации, или я должен изменить его, чтобы удалить AUTOLOAD, реализовав функцию для каждой команды вкласс устройства, что-то вроде:
sub getVersion {
my $connection = $device->getConnection();
return $connection->getVersion();
}
У нас есть 150+ таких команд, доступных через все три интерфейса (HTTP, Telnet, SSH).