Reglas para código mas simple en php
No abreviar código
// Malo
class Trnsltr { }
// Bueno
class Translator { }
// Malo
foreach ($x in $people) {
$x->name
}
// Bueno
foreach ($person in $people) {
$person->name
}
// Esta bien
$id = 0;
// Innecesario debido a que id es ampliamente usado
$identificator = 0;
class UserRepository {
// No hay mucho contexto de como
// funciona por el nombre del método.
public function fetch($billingId) {
}
// Deja claro por que tipo de id obtiene los datos.
public function fetchByBillingId($id) {
}
}
class Order {
// Método que necesita ser refactorizado.
public function prepAndShipAndNotifyUser()
{
# code...
}
}
/**
* Clase que al declarar un método parece todo correcto
* pero que al usarlo se ve un poco redundante.
*/
class Order
{
function shipOrder()
{
}
}
$order->shipOrder();
/**
* Cambiando un poco el nombre del método
* aun es comprensible y sin redundancias.
*/
class Order
{
function ship()
{
}
}
$order->ship();
No usar else (Code Smell)
/**
* Método con un uso innecesario de else.
*/
public function store()
{
$input = Request::all();
$validation = Validator::make($input, ['username' => 'required']);
if (date('l') !== 'Friday')
{
if ($validation->passes())
{
Post::create($input);
return Redirect::home();
}
else
{
return Redirect::back()->withInput()->withErrors($validation);
}
}
else
{
throw new Exception('No trabajamos en Viernes!!!');
}
}
/**
* Cambiando un poco el orden de validaciones se pudo quitar todos los else.
*/
public function store()
{
$input = Request::all();
$validation = Validator::make($input, ['username' => 'required']);
if (date('l') == 'Friday')
{
throw new Exception('No trabajamos en Viernes!!!');
}
if ($validation->fails())
{
return Redirect::back()->withInput()->withErrors($validation);
}
Post::create($input);
return Redirect::home();
}
Code smell (código que huele mal)
/**
* Código con problemas de "Code smell".
*/
function signUp($subscription)
{
if ($subscription == 'monthly')
{
$this->createMonthlySubscription();
}
else if ($subscription == 'forever')
{
$this->createForeverSubscription();
}
}
/**
* Problema solucionado con patrones de diseño y polimorfismo.
*/
function signUp(Subscription $subscription)
{
$subscription->create();
}
/**
* Código en alguna otra clase.
*/
function getSubscriptionType($type)
{
if (type == 'forever')
{
return new ForeverSubscription;
}
return new MonthlySubscription;
}
$subscription = getSubscriptionType($type);
signUp($subscription);