[Cascavel-pm] Como dividir uma classe em .pm's mais específicos?

Daniel Ruoso daniel em ruoso.com
Segunda Abril 4 13:06:24 PDT 2005


Em Seg, 2005-04-04 às 16:46, Rod Za escreveu:
> Eu criei uma classe com vrios metodos em um nico arquivo .pm e este est funcionando
> perfeitamente s que ficou muito grande o arquivo e a manutenćo est um pouco confusa por
> este motivo.
> Eu gostaria de saber como posso fazer para separar alguns mtodos (por especialidade) em outros
> arquivos .pm e que estes faćam parte da classe principal.
> Ex: classe_principal.pm
>     metodos_db_da_classe_principal.pm
>     metodos_para_lidar_com_outras_coisas_especificas.pm

Hmmmm... isso me cheira a falta de herança, definição de módulos
acessórios e outras coisas assim...

é claro que vendo o código seria possível entender melhor, mas me parece
que você está colocando coisa demais na mesma classe, não?

Se ela acessa o banco de dados, a classe provavelmente representa uma
tabela no banco de dados, certo? se for isso, os métodos de acesso devem
provavelmente estar em uma superclasse de todas as classes de entidade
(esse é o nome que se dá para classes que representam dados
persistidos).

quanto aos métodos para lidar com outras coisas específicas, me parece
que são regras de negócio, então, em geral, você deveria estar colocando
isso em classes separadas mesmo.

Mas, se você nao quiser rever a estrutura da sua aplicação como um todo
você pode usar o exporter.

Tipo assim...

classe específica 1:

package Classe_para_lidar_com_db;

use base qw(Exporter);
@EXPORT = qw(metodo1 metodo2);

[...]

classe especifica 2:

package Classe_especifica;

use base qw(Exporter);
@EXPORT = qw(metodo3 metodo4);

[...]

classe principal:

package Classe_principal;

use Classe_para_lidar_com_db;
use Classe_especifica;

sub bla {
	# aqui eu posso chamar os metodos
	metodo1();

	my $self = shift;
	# mesmo se for usando a sintaxe OO
	$self->metodo2();

	# ou a outra sintaxe OO
	metodo3 Classe_principal();
}


Mas eu realmente recomendo que você revise a arquitetura do seu
aplicativo...


daniel



Mais detalhes sobre a lista de discussão Cascavel-pm