2008-10-08 3 views
6

В нашем продукте у нас есть большой файл утилиты, который нам требуется (с do) в начале большого количества наших файлов. Есть ли причина не, чтобы превратить это в модуль? Например, вместо того, чтобы делать это:Должен ли я изменить свой utilities.pl на модуль utilities.pm?

do '../dbi_utilities.pl'; 
our ($db,$user,$pw,$attr); 
my $Data = DBI->connect($db,$user,$pw,$attr) or die "Could not connect to database: $DBI::errstr"; 

Не могу я просто сделать это ?:

use AppUtil; 
my $Data = AppUtil->connect(); 

Каковы плюсы и минусы каждого стиля?

ответ

8

Единственная причина не делать это - время.

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

Что будет стоить вам вовремя, будет более чем составлено, когда вы начнете использовать правильные тесты («сделать тест» или «./Build test» или просто «доказать ...») и уметь убедитесь, что ваши изменения ничего не сломают, прежде чем проверять его. Таким образом, конвертируйте. Просто имейте в виду, что это не бесплатный выигрыш.

2

Создание модуля из него сделает его более надежным. В настоящее время многие вещи неформально зависят друг от друга, но эти зависимости не сразу очевидны.

Кроме того, это позволит вам импортировать только часть утилит.

6

С помощью do() вы загружаете и компилируете файл utilities.pl каждый раз, что может вызвать проблемы, если вы выполняете() его более одного раза. Кроме того, use выполняется при компиляции, которая позволит вашей программе сбой раньше или даже будет протестирована с помощью perl -wc.

Наконец, хранение его в пакете позволяет защитить его пространство имен, что может быть полезно по мере роста вашего проекта.

Я настоятельно рекомендовал бы превратить ваш utilites.pl в подходящий пакет Perl, который загружается use.

1

Вы получаете весь классный материал модуля, инкапсуляцию, специальные функции модуля и так далее.

Обратите внимание, что, используя use с вашим синтаксисом. создание объекта для пространства имен AppUtil и вызов подпрограммы connect. для ваших утилит.

Также у вас должно быть 1; в конце вашего файла.


Вставлять с другой метод означает, что вы не должны изменять любой код, вы не должны добавить 1 в конце.

Все значения «делать», «использовать» и «требовать» импортируются, но код области видимости внутри них (кроме названных подпрограмм, потому что они не могут быть скрыты).

+0

Создание чего-то в модуле не волшебным образом дает вам какие-либо функции.Вы должны правильно его закодировать. Также обратите внимание, что делать и требовать * не * импортировать автоматически. – 2008-10-08 21:52:49

7

Создав свой код в модуле с надлежащим рефакторингом, вы легко сможете его протестировать. Я об этом говорю в своей статье "Scripts as Modules" за Журнал Perl, а также "How a Script Becomes a Module" на Perlmonks.

Удача,

Смежные вопросы