We are using OOP perl as a programming languge to design this framework, so this algo-like code is in Perl.
We are developing an automation framework in OOP Perl for an end-point device. This end-point device provides a HTTP, Telnet and SSH interface to execute the certain set of commands. For simplicity, we can assume that all commands are supported by all the three connection interfaces, generating the same output for a given command.
A function is written in the respective Connection class to handle a specific command.
e.g.
sub getVersion {
return $http->sendCommand('version');
}
But the current implementation of calling such function is little but different. Suppose, we would like to call the getVersion function, then it will be called something like this.
$device->getVersion(); //This is called through device object rather than connection object.
since this function is not defined in the device class, AUTOLOAD is called. In the Device class, AUTOLOAD is implemented like this
sub AUTOLOAD {
my $connection = $device->getConnection();
return $connection->$methodName (..); // when called for getVersion, $methodName will become the "getVersion"
}
Please let me know if this is a good practice to implement it or should I modify it to remove the AUTOLOAD by implementing a function for each command in the device class, something like:
sub getVersion {
my $connection = $device->getConnection();
return $connection->getVersion();
}
We have 150+ such commands available through all the three interfaces (HTTP, Telnet, SSH).
Class::Delegatoris a good fit for a cleaner implementation. You could probably design a class that is the root behavior, sayConnected, which defines how to get a connection.