Tirar SQL e Strings do código

1. Tirar SQL e Strings do código

Willie Moraes Oliveira
asclows

(usa Slackware)

Enviado em 10/11/2005 - 09:55h

Tenho visto algumas pessoas dizendo em não colocar strings SQL no meio do código PHP para ter uma melhor organização e manutenção. Outras também dizendo a respeito de não se colocar valores literais no meio do HTML como: rótulos de campos, títulos, descrições de links e etc.

Como fazem este tipo de coisa?


  


2. Re: Tirar SQL e Strings do código

Anderson de Arruda Casimiro
duodraco

(usa )

Enviado em 11/11/2005 - 11:24h

Na verdade eu vejo isso com "encapsulamento" de código.. se você trabalha com classes/objetos, voce nao vai colocar um SQL no mesmo arquivo que vc vai dar saida... nas classes vc vai definir funções que vao fazer a interação com BD.

em vez de fazer
/*index.php*/
<?
$sql = "SELECT * FROM tabela";
$qry = mysql_query($sql);
while($rs = mysql_fetch_array($qry)){
/* --- */
}
mysql_close();
?>
e replicar isso em vários arquivos você pode fazer assim:

/*classe.inc.php*/
<?php
class Geral{
function getTudo(){
$sql = "SELECT * FROM tabela";
$qry = mysql_query($sql);
$aResult = array();
while($rs = mysql_fetch_array($qry)){
/* atribuição de recordSet ao array */
}
return $aResult;
}
}
?>
/* arquivos do seu site*/
<?
require("classe.inc.php");
$tudo = new Geral;
$arraypratrabalhar = $tudo->getTudo();
?>
voce so vai chamar a função para todos os arquivos. se um dia vc tiver que mudar a função só vai fazê-lo uma vez. E pra não misturar codigo, o SQL vai ficar dentro da função, num lugar só.



3. eu havia pensando nisso mas...

Willie Moraes Oliveira
asclows

(usa Slackware)

Enviado em 11/11/2005 - 14:40h

estava pensando em algo mais refinado, porque do modo como me sugeriu eu poderia trabalha de duas formas:

1. Criando método para cadas tipo de consulta:

class Tudo {

function getUserList()
{
$sql = 'SELECT * FROM USER';

}

function getPageList()
{
$sql = 'SELECT * FROM PAGE';

}

function XXXX.... {
}

}
ou

2. Criando vários objetos claro que cada um com suas respectivas consultas.


class User {

function getList()
{
$sql = 'SELECT * FROM USER';

}

function addUser( $C1, $C2 , $CX... )
{
$sql = 'INSERT INTO USER VALUE ( '$C1', $C2, $CX... )';

}

}

class Page {

function method1()
{
$sql1 = /* string SQL */;
/* comandos para manipulação da string */
}

function method2()
{
$sql2 = /* string SQL */;
/* comandos para manipulação da string */
}


}

No entanto tenho procurado uma forma talvez mais limpa "ao meu ver é claro, nada contra sua opinião". Por exemplo, não haveria uma maneira de implementar isto usando arquivo XML. Tipo com isso poderia expressar o que fizemos acima de uma forma declarativa e ao mesmo tempo muito organizada.

Por exemplo:

<user>
<select>SELECT * FROM USER WHERE id = '?'</select>
<update>UPDATE SET USER name='?' WHERE id = '?'</update>
<insert>INSERT INTO USER VALUES ( '', '?', '?', '?' )</insert>
<delete>DELETE FROM USER WHERE id = '?'</delete>
</user>

Dessa mesma forma eu poderia, sei lá, substituir as interrogações (?) por parametros que passaria para um método do objeto usuário por exemplo.

$user->add( '0006', 'Willie Moraes', '3212-3210' );

O método 'add' poderia parsear o xml substituindo as interrogações na sequência exata pela qual os parâmetros foram recebidos. E finalmente executando as strings.

Será este tipo de solução pode ser considerada uma boa alternativa?


4. Re: Tirar SQL e Strings do código

Afonso França de Oliveira
afonso_franca

(usa Outra)

Enviado em 11/11/2005 - 17:02h

Eh acho que é uma boa alternativa sim. O grande problema é o consumo de processamento pra substituir essas "?" pelos valores das funções. Foram que vai ficar quase do mesmo tamanho e pra mim não organizaria visualmente. Essa é só a minha opinião também.


5. Re: Tirar SQL e Strings do código

Willie Moraes Oliveira
asclows

(usa Slackware)

Enviado em 11/11/2005 - 17:57h

Pois é, tem outra sugestão partindo do princípio da utilização do XML. Ou não seria a melhor opção trabalhar com XML?


6. Queries complexas

Eduardo Cereto Carvalho
dudus

(usa Ubuntu)

Enviado em 12/11/2005 - 02:28h

Bom essa sua solução me parece boa para consultas simples como selects sem joins ou com um join. Porem quando você começa a ter necessidade de usar queries com multiplos joins ou joins complexos comeca a ficar ruim. Já que você precisará de mais variáveis para conseguir abstrair seu codigo. E no final você precisará de tantas variaveis que não simplificou em nada.

Você tem que ter em mente que quando você faz isso que você quer (abstrai a camada do banco de dados) está de certa forma capando a PL/SQL e portant perdendo alguns recurssos dessa linguagem. Talvez haja uma maneira de não perder nenhum recursso, porém com certeza não será simples.

O ganho sobre isso é que mesmo que você utilize um banco de compatibilidade dificil como o oracle e queira mudar para um outro como mysql, por exemplo, amanhã, será possível apenas mudando esse seu framework. Issu sim é uma grande vantagem.

A grande vantagem do php é a quantidade de material disponivel. o pear possui uma das classes mais famosas de abstração de banco de dados no php, é o PEAR:DB(http://pear.php.net/package/DB). Eu nunca trabalhei com ela mas já ouvi coisas excelentes.

Se optar por usar uma abstração lembre-se do seguinte. Talvez você já saiba sql e poderia fazer todo seu sistema usando sql puro, porem se quiser usar uma abstração como o PEAR:DB terá que aprender a usar a interface daquela classe. Isso nem sempre e facil, ainda mais se a documentação não estiver completa o que é muito comum. o PEAR:DB tem uma ótima documentação, mesmo assim você levará um tempo para se tornar produtivo com ela.

Julgue suas vantagens e desvantagens e leia sempre várias opiniões antes de adotar uma solução dessas ok.a


7. Design Patterns

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/11/2005 - 13:23h

Bom, procure na internet sobre design patterns que poderão te ajudar.
Vi uma palestra no CONISLI (Congresso Internacional de Software Livre - em São Paulo) que falava sobre MVC+DAO.
Resumidadmente:
MVC = Model, View, Control
Model -> Modelo da página
View -> Podemos dizer, de forma ampla, que será o template da página.
Controle -> Sua regra de negócio.
DAO = Data Access Object

Voltando ao tópico, nessa palestra ele mostrou, de uma forma ampla e até um pouco complicada, como funciona a abstração de base de dados no PHP.

Pessoalmente, acredito que utilizar um banco de dados que suporte stored procedures (MySQL 5 está suportando...rs) seja uma boa, pois assim você separa as suas querys do seu script PHP.

Eu utilizo a classe ADODB nos meus projetos, e minhas querys ainda continuam no código.

Ouvi falar também da classes Lumine (http://www.hufersil.com.br/lumine/site/) mas acredito que só funcione para selects simples, sem Joins e Sub-Querys.

Enfim, busque sobre Design Patterns, quem sabe você acha alguma coisa nesse sentido e poste aqui para a gente.


Abraços,
Willian


8. dudus e maurowill

Willie Moraes Oliveira
asclows

(usa Slackware)

Enviado em 14/11/2005 - 14:38h

CONCERTEZA ESTAREI OLHANDO ESTES MATERIAIS QUE RECOMENDARAM O MAIS RÁPIDO POSSÍVEL AGUARDEM.

Neste meio tempo, gostaria de opiniões sobre a segunda parte da pergunta deste tópico.

Como retirar strings da apresentação?

Seria através de arquivos de definição contendo por exemplo:

define( 'TITLE', 'Viva o Linux' );
ou
define( 'TITLE', $title );

e depois para utilizá-las no HTML:

<?php echo TITLE ?>

Este modo me parece ser o padrão adotado pelo PHP-NUKE para suportar diversos idiomas até o momento que deixei de observá-lo. No entanto tenho procurado observar alguns projetos que julgo mais interessantes em termos de profissionalismo como Joomla e Drupal que pelo pouco que já vi têm adotado uma codificação limpa e claro muito organizada e adotando POO com PHP.

Estes CMS parecem solucionar minha pergunta com XML para definição destas strings. O que acham? Quais prós, quais contras? O que preferem, ou como têm feito em seus sistemas?


9. Smarty

Eduardo Cereto Carvalho
dudus

(usa Ubuntu)

Enviado em 15/11/2005 - 03:45h

Cara vou te recomendar outra classe. A classe do smarty(http://smarty.php.net/). Essa classe permite você separar o código da apresentação criando templates. Várias CMS's usam o smarty. Não tenho certeza sobre o Joomla.

Essa classe permite que você crie arquivos de configuração. Nesses arquivos você pode por todos os strings que quiser.Eu considero essa a maneira mais elegante que existe.

A classe do smarty, pode parecer um pouo complicada no ínicio, mas traz grandes vantagens quando bem usada. É muito usada e tem até uma comunidade aqui no viva o linux sobre ela.


10. Sobre a lumine

Hugo Ferreira da Silva
hufersil

(usa Outra)

Enviado em 13/05/2006 - 00:36h

maurowil, o pacote Lumine que estou desenvolvendo propõe-se muito mais do que inserts e selects. Estou desenvolvendo lumine no sentido de fazer com que o uso de SQL seja extramente minimizado, incluindo a possibilidade de Join (inner, left, right etc) validação dos dados antes da inserção e outras coisas.

Outra coisa, é que Lumine trabalha com mapeamento de banco de dados utilizando XML.

Além disso, ainda desenvolvi um editor visual para ele - http://www.hufersil.com.br/lumine/editor/ . Este editor ainda não está 100%, mas estou implementando cada vez mais.

Estou aberto a contribuições no desenvolvimento.

Caso tenham dúvidas, podem postar no fórum que sou mais ativo, que é o do MXSTUDIO

@braços e fiquem com Deus!

Hugo Ferreira da Silva


11. Estou usando o LUMINE

Daniele Vincenzi
daniele.vincenzi

(usa Fedora)

Enviado em 07/11/2006 - 13:51h

Olá Hugo,

Estou utilizando o Lumine há 4 DIAS...
Tive bastante progresso, consegui fazer select e insert.
Porém estou com muita dificuldade de achar tutoriais e materias... vc sabe de algum lugar???

Minha dúvida no momento é a seguinte, fiz um find(), só que eu precisava fazer um where nome like blabla

Como faço isso com o Lumine???

Aguardo uma resposta...

Meu e-mail é daniele.vincenzi@smartis.com.br


12. Realidade virtual


01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts