Обычно при наличии циклической зависимости есть несколько способов её
вылечить.

Самый распространённый - разделить модуль на два, один с функционалом без
зависимости, а другой - оной зависимостью.

Кстати, для почты так и напрашивается два слоя, системный (реализация) и
уровня приложения (с логгингом).

Далее,
Кстати, в мире Ruby обычно информацию о подключении держат отдельно, в файле
database.yml.

Соответственно, просто
use YAML qw( Load );

my $connection_parameters = Load("${APP_ROOT}/config/database.yml");


19 марта 2010 г. 11:50 пользователь Roman V. Nikolaev
<[email protected]>написал:

> Привет. Помогите осилить сабж. Есть несколько конкретных примеров и не
> понятно как нормально сделать:
>
> Например есть модуль My::Config который берет данные о подключения к БД
> из txt файла, а так же через него получают некоторые конфигурационные
> параметры из БД (с помощью DBI). Таким образом получается зависимость
> что DBI нужен модуль конфига чтобы получить данные о подключении, а
> конфигу нужен DBI чтобы далее работать с параметрами хранящимися в БД.
>
> Или вот второй пример: модулю отсылки почты надо вести логи, и он
> подключает соответствующий модуль. И наоборот, модулю работы с логами
> надо, например в случае ошибки, отослать письмо.
>
> Пока что вижу решение в разделение модуля конфига на два модуля. Один
> который просто будет считывать файл конфига и отдавать DBI. Другой уже
> со всем остальными конфигурационными параметрами и работой с DBI.
>
> По второму примеру даже не знаю ... везде как-то размазывать
> функциональность по разным модулям? Они ведь бывают довольно сложные и
> не хотелось бы дублировать кучу кода.
>
> P.S. Надеюсь понятно объяснил.
>
> --
>
>         Roman V. Nikolaev
>
> mail:        [email protected]
> icq:         198-364-657
> jabber:      [email protected]
> site:        http://www.rshadow.ru
>
>
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>
>
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить