Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 14700

lógica, método "redundante" ?

$
0
0
Boas pessoal,

Precisava de uma ajuda na maneira de organização de duas classes

Exemplo:

Eu quero enviar encomendas utilizando várias empresas de correio ( ctt, dhl, fedex, etc )

E cada uma dessas empresas é uma classe, e que têm o método para enviar encomendas:

class-ctt.php
class-dhl.php
class-fedex.php



O que eu fiz foi

class-enviarEncomendas.php // que trata de enviar encomendas


class-meuprojecto.php // class para gestão do meu projecto


class-enviarEncomendas.php
Código (PHP):
require 'class-ctt.php';
require 'class-dhl.php'
require 'class-fedex.php'


class class-enviarEncomendas {

private empresaTransporte;
private empresaInstancia;

function __construct($empresa) {

if($empresa == "ctt") {
$this->empresaInstancia = new ctt();
}
else if($empresa == "fedex") {
$this->empresaInstancia = new fedex();
}
else if {
// assim em diante
}
$this->empresaTransporte = $empresa;

}


public function enviarEncomenda() {

//agora vejo novamente qual a empresa que foi chamada no construct e chamo o método correspondente
if($this->empresaTransporte == "ctt") {
$this->empresaInstancia->MetodoEnviarCTT();
}
else if($this->empresaTransporte == "fedex") {
$this->empresaInstancia->MetodoEnviarFEDEX();
}

}

}


class-meuprojecto.php
Código (PHP):
class-meuprojecto extends class-enviarEncomendas {

private empresaTransporte = ctt; // defino a empresa que quero utilizar para o envio

function __construct() {


parrent:construct($this->empresaTransporte);

// outras variaveis são definidas aqui também


}


public function enviar() {

$this->enviarEncomenda() // chamo o metodo da class parent
//fazer as query para guardar, etc, blalbal
}



}


(Ok, até agora isto está a funcionar, e sei que talvez não seja a melhor maneira de fazer isto, por isso podem dar as vossas opiniões.)


O problema:

Agora o problema é que eu quero modificar o metodo enviarEncomenda()de maneira que se o envio pelos ctt falhar, tenta enviar pelo fedex, se este também falhar passa para a próxima empresa.

A solução que tinha pensado era fazer um array por ordem de preferência: array("ctt", "fedex", etc) e percorrê-lo enquanto não for retornado true, mas também quero que seja possivel definir apenas e só uma empresa de envio.

No meio disto tudo não como é obvio não posso estar a instanciar classes de cada empresa...


Bem, como é que vocês fariam ou como é que eu devo fazer? :thumbsup:

Viewing all articles
Browse latest Browse all 14700