Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alexsandro XPT

O que é mais certo/coerente? usar abstract ou interface para POO?

Recommended Posts

Sei que Interface não implementa métodos.

 

Sei que todas classes que herdarem irão seguir as definições de métodos apenas pois variaveis nao tem jeito que é uma pena.

 

Dai entao classes abstract nao pode ser instanciada que é uma boa ideia no meu caso.

E que todas as classes(mysql, mssql e etc) iram quer herdar tudo da classe abstract podendo reutilizar todos métodos e propriedades nao abstract da classe.

 

 

Dai ta agrande dúvida, acho que interface nao vai servir neste caso, pois abstract faz tudo e mais um pouco. :blink:

 

 

Alguem tem ideia/maior experiencia com isto?

 

 

Valew..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem meu krao Alexsandro XPT no seu caso eu acho que seria mais viavel você utilizar o Abstract apesar que teria como utilizar os 2 em conjuntos como irei mostrar no meu exemplo.

 

Imagina só você poderia ter algo como new FW_Db_Adapter_Mysql(array(das infos)); ou poderia ter tbm uma outra opção FW_DB::Factory('Mysql')->config(array(das infos));

 

Vou te mostrar um exemplo:

 

<?php

/**
 * Minha classe abstract
 *
 */
abstract class Fw_Db_Adapter_Abstract {
	
	/**
	 * Metodo (do) para buscar um determinado Id
	 *
	 * @param array $arrId
	 */
	abstract protected function doFind($arrId);
	
	/**
	 * Metodo para fazer buscar determinado registro pela chave primária
	 *
	 * @param array $arrId
	 */
	public function find($arrId){
		return $this->doFind($arrId);
	}
	
}

/**
 * Minha classe interface
 *
 */
interface Fw_Db_Interface{
	
	/**
	 * Seta as configurações
	 *
	 * @param array $arrConfig
	 */
	public function setConfig($arrConfig);
	
}

/**
 * Meu modulo Db
 *
 */
class Fw_Db{
	/**
	 * define o classPath
	 *
	 * @var string
	 */
	private $_classPath = 'Fw/Db/Adapter/';
	
	/**
	 * Faz o carregamento de uma determinada class
	 *
	 * @param string $strClass
	 */
	public function Factory($strClass){
		return new $this->_classPath . $strClass . ".php";
	}
	
}

/**
 * Meu adaptador Mysql
 *
 */
class Fw_Db_Adapter_Mysql extends Fw_Db_Adapter_Abstract implements Fw_Db_Interface {
	
	/**
	 * Metodo contrutora
	 *
	 * @param array $arrConfig
	 */
	public function __construct($arrConfig=null){
		($arrConfig)? self::setConfig($arrConfig) : null;
	}
	
	/**
	 * Seta a configuração
	 *
	 */
	public function setConfig($arrConfig){
		echo "config";
	}
	
	/**
	 * Busca pelo Id
	 *
	 * @param array $arrId
	 */
	protected function doFind($arrId){
		echo "<pre>";
		print_r($arrId);
		echo "</pre>";
	}
}

/**
 * Meu adaptador Postgre
 *
 */
class Fw_Db_Adapter_Postgre extends Fw_Db_Adapter_Abstract implements Fw_Db_Interface {
	
	/**
	 * Metodo contrutora
	 *
	 * @param array $arrConfig
	 */
	public function __construct($arrConfig=null){
		($arrConfig)? self::setConfig($arrConfig) : null;
	}
	
	/**
	 * Seta a configuração
	 *
	 */
	public function setConfig($arrConfig){
		echo "config";
	}
	
	/**
	 * Busca pelo Id
	 *
	 * @param array $arrId
	 */
	protected function doFind($arrId){
		echo "<pre>";
		print_r($arrId);
		echo "</pre>";
	}
}

##
# Testes

$objMysql = new Fw_Db_Adapter_Mysql(array("hostname"=>"localhost","user"=>"123","pass"=>"123"));
$objMysql->find(array(1,5,78));

$objPostgre = new Fw_Db_Adapter_Postgre(array("hostname"=>"localhost","user"=>"123","pass"=>"123"));
$objPostgre->find(array(1,5,78));

## OU

$objMysql = Fw_Db::Factory('Mysql')
			->setConfig(array("hostname"=>"localhost","user"=>"123","pass"=>"123"));
$objMysql->find(array(1,5,78));


$objPostgre = Fw_Db::Factory('Postgre')
			->setConfig(array("hostname"=>"localhost","user"=>"123","pass"=>"123"));
$objPostgre->find(array(1,5,78));
?>

Sako a ideia?

 

Espero ter dado uma luz no fim do tunel =)

Caso você esteja montando um Framework faz ele trabalhar em MVC em =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae, valew pela dica...

 

Entendi o seu uso da Interface.

 

 

 

Pois é ja faz tempo que estou fazendo este framework, hoje resolvi implementar o uso do DB mysql que so antes usava mssql.

 

Esta minha classe tem tratamento de cache via headers http, algunas plugins smarty e implementações de ajax.

 

Está faltando mesmo era este negocio do DB que estou fazendo agora e melhorar a forma de como fazer fomulários totalmente automaticos com validações e com e sem ajax.

 

Quanto ao MVC eu ja estou fazendo o uso. ;)

 

 

breve vou postar um UML de como esta ficando.

 

 

 

Valew.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Implementa uso de interfaces de view com a biblioteca EXTJS de javascript.. que ae o seu framework vai ficar legal.. ele é um otimo para criar formulários, grids. nossa um monte de coisas.. mais infos em extjs.com.br ou extjs.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae!

 

Pois é, eu conheço a bilioteca EXT, pra falar verdade eu nao gostei muito dela.

 

Achei ela pesada, so o JS tem 300k fora os CSS que nao sao poucos... rs...

 

Eu pouco que usei ela eu achei muito complicada para por em um Framework, imagina alguem iniciante pega meu frame e e nao consegue mudar a camada view por causa dakela confusão danada.

 

As vezes a pessoa que quer mudar uma coisa mas vé que mudando uma cor/imagem apenas nao é suficiente para mudar todo design do site/aplicativo.

 

Sem dúvida EXT é um frame js muito boa, estável e bonita com muitos componentes prontos.

 

Mas acho que a Web tem que se diversificada visualmente, se usar EXT vou ter muito layout igual.

 

Vou esperar ela se popularizar mais. Eu e um amigo meu usamos ela em um aplicativo.

 

Onde eu nao vou leva-la a fundo mais o meu amigo está apostando nela que você pode ver em:

 

 

Eu - http://64.22.106.138/$sitepreview/ale...oflux/index.php (veja o uso ela no menu login) mas so funciona legal no Firefox ou no IE7, IE6 eu ainda não consertei os danados dos CSS para funcionar corretamente no IE6 com png não, vida de webstandards e programador juntas é fogo :P

 

Amigo - www.efinance.com.br

 

 

Valew pelas dica, breve posto o UML. :P

 

Implementa uso de interfaces de view com a biblioteca EXTJS de javascript.. que ae o seu framework vai ficar legal.. ele é um otimo para criar formulários, grids. nossa um monte de coisas.. mais infos em extjs.com.br ou extjs.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacana...

 

 

Aqui, deixa eu te perguntar uma coisa sobre MVC.

 

 

Tratar XML é papel de quem? do model ou do view ou depende do caso?

 

 

Porque eu estou carregando um xml e mostrando-o.

 

 

Falow.

 

 

 

 

 

Olha o meu..

 

http://helpdesk.srvlinux.com/v1/www/hc

 

Ai eu estou usando um framework o Zend Framework + Smarty + Extjs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem depende de cada caso muitas veses pode ser no model e outros casos no View. pois.. javascript tbm lé XML ;)

 

Como XML é algo onde se amarzena dados eu considero MODEL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

So que no meu caso eu preciso recuperar o XML e exibir o XML.

Como você considera neste caso?

 

 

 

E neste?

XML será um RSS.

 

 

 

Valew.

 

Bem depende de cada caso muitas veses pode ser no model e outros casos no View. pois.. javascript tbm lé XML ;)

 

Como XML é algo onde se amarzena dados eu considero MODEL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem eu então consedaria ele um Controller pois se você for ver bem você está criando um controle para gerar um novo XML. ;) e claro que se você for criar as tags você num vai criar o Controller e sim no view.. o controle pega traz o carregamento dos dados envia para o view tratar da maneira que será exibido.. então pelo controle você envia o tipo de header que essa view terá ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.