Я не беспокоюсь о псевдонимах. Я думаю, что это неправильный путь. Если вы просто хотите меньше печатать, это может быть ответом (но является ли новая зависимость большей выгодой, чем риском?). Мне не нравится идея обмануть программиста по обслуживанию, скрывая от него настоящее имя, поскольку создание псевдонимов происходит далеко от его использования, и нет никаких признаков того, что то, что выглядит как имя класса, не является реальным классом.
В основном я ищу простое создание подклассов, поэтому я позволю классу решить для себя, какой модуль будет реализовывать деталь.
Например, я мог бы начать с класса, который хочет использовать Foo
для обработки части работы. Я знаю, что могу захотеть создать подкласс Foo
позже, поэтому я не буду жестко кодировать его:
package Foo::Bar;
sub foo_class { 'Foo' }
sub new {
....
eval "require $self->foo_class";
$self->foo_class->do_something;
}
В приложении я выбираю 'Foo :: Bar':
#!perl
use Foo::Bar;
my $obj = Foo::Bar->new();
Позже мне нужно специализировать Foo, поэтому я создаю подкласс, переопределяя нужные мне части:
package Foo::Bar::Baz;
use parent 'Foo::Bar';
sub foo_class { 'Local::Foo::SomeFeature' }
1;
Другое приложение использует почти все те же вещи, но с небольшим изменением:
#!perl
use Foo::Bar::Baz;
my $obj = Foo::Bar::Baz->new();
Вы также можете сделать то же самое на уровне приложения, если вы хотите написать одну программу и позволить пользователям выбирать класс через конфигурацию.