Melhor forma de uso de uma classe aqui
Olá. Ao desenvolver projetos costumo pensar primeiro na forma de uso, porém acho que fiz umas burrices aqui numa classe que estou mexendo.
Ela é uma simples classe de geração de SQL (quem ver meus outros tópicos vai notar que estou a muito tempo mexendo nela, mas é por falta de tempo). Para gerar o seguinte código SQL...:
SELECT login, level FROM players WHERE level >= 15 AND level <= 60 OR vip = 1 GROUP BY class
Minha classe é usada da seguinte forma:
use Database\SQL\Generator;
$generator = new SQL_Generator(SQL_Generator::PARAM_MYSQL);
$sql = $generator->select('login', 'level')->from('players')->where(
$generator->_or(
$generator->_and(
$generator->greater('level', 15, SQL_Generator::GREATER_OR_EQUAL),
$generator->less('level', 60, SQL_Generator::LESS_OR_EQUAL)
),
$generator->equal('vip', true)
)
)->groupBy('class');
Porém acho que não está certo eu usar métodos para cada "pedaço" do SQL, já que desde o nome, métodos e funções devem representar ação (do(), add()...).
Então estou pensando em mudar a forma de uso pro seguinte:
use Database\SQL\Generator;
$generator = new SQL_Generator(SQL_Generator::PARAM_MYSQL);
$sql = $generator->add(SQL_Generator::ADD_SELECT, ['login', 'level'])->add(SQL_Generator::ADD_FROM, ['players'])->add(SQL_Generator::ADD_WHERE, [
$generator->add(SQL_Generator::ADD_OR, [
$generator->add(SQL_Generator::ADD_AND, [
$generator->add(SQL_Generator::ADD_GREATER_OR_EQUAL, ['level', 15]),
$generator->add(SQL_Generator::ADD_LESS_OR_EQUAL, ['level', 60])
]),
$generator->add(SQL_Generator::ADD_EQUAL, ['vip', true])
])
])->add(SQL_Generator::ADD_GROUP_BY, ['class']);
Ficou horrível esse tanto de constante né? (é pra responder).
Estava vendo aqui, e não sei que versão do Doctrine que na classe Doctrine_Query ele usa métodos parecidos com os do meu primeiro código aí, mas mesmo sendo um FW grande e popular, isso não foi capaz de tirar a sensação de que estou fazendo errado aí (no caso seria referente ao nome dos métodos).
Esse segundo código aí me agradou mais pelo nome do método fazer mais sentido (ação de adicionar), mas acho que ficou muito feio isso aí. Se isso for muita frescura, a culpa é dos blogs que falam da importância de um código limpo, hehe.
Então, alguém poderia me dar alguma dica sobre esse caso aí? ^^
Ate mais.
Discussão (5)
Carregando comentários...