Svež primer. Imam reklamnu kampanju koja ima vlasnika. Tokom prvog dela razvoja owner_name je bio varchar polje koje je sadržalo samo ime jer je to bilo dozvoljno da bi se zadovoljila prva specifikacija (owner_name je korišćen samo za statistike). Međutim, tokom rada sam došao do toga da mi owneri trebaju odvojeno pošto se na osnovu njih vrše neke druge kalkulacije (potreba da se globalni cenovnik zameni cenovnikom na nivou vlasnika i slične stvarčice). Izmena je bila veoma jednostavna:
PHP kôd:
// Stari kod
class Campaign {
/**
* Return owner name
*
* @return string
*/
function getOwnerName() {
return $this->columnValue('owner_name');
}
}
// Novi kod, sitna izmena
class Campaign {
/**
* Return owner object
*
* @return CampaignOwner
*/
function getOwner() {
return CampaignOwners::findById($this->getOwnerId());
}
/**
* Return owner name
*
* @return string
*/
function getOwnerName() {
if($this->getOwner() instanceof CampaignOwner) {
return $this->getOwner()->getName();
} else {
throw new Exception('Owner is missing');
}
}
}
Da sam sve vreme tretirao owner_name kao klasično polje i pristupao mu sa $this->owner_name postojeći kod bez većih izmena ne bi mogao da odgovori na nove zahteve.
Accessori? Uvek!