Kaip grafinis paslaugų atvaizdavimas gali pakelti pardavimus
Tai puikus pavyzdys, kaip paslaugų pristatymo grafinis sprendimas gali pakelti pardavimus. Internetinių projektų kūrimo lyderė 37signals nusprendė pabandyti “pažaisti” su paslaugos Basecamp planų pristatymų, su tiklsu, kad esami klientai pereitų prie brangesnių planų. Tam tikslui nusamdė web dizainerį iš šalies, kad įgautų “šviežaus oro”. Kadangi dažnai būna taip, jog ilgai dirbantis prie produkto pradeda nepastebėti tam tikrų niuansų. Kas iš tikrųjų naudinga, tai pats dizaineris gan smulkiai aprašė visą kelią iki naujo grafinio atvaizdavimo sukūrimo.
O rezultatai tokie:
- 13% daugiau planų keitimo į aukštesnį per dieną
- 33% daugiau planų keitimo į “Plus” per dieną
- 8% daugiau uždirbtų $
counterCache įrašų skaičiui saugoti
Imkime kaip pavyzdį užduočių valdymo (ToDo) aplikaciją ir norime sužinoti kiek kiekvienoje kategorijoje yra nebaigtų darbų.
-
CREATE TABLE IF NOT EXISTS `task_categories` (
-
`id` int(10) unsigned NOT NULL auto_increment,
-
`item_count` int(10) unsigned NOT NULL,
-
`name` varchar(32) NOT NULL,
-
`created` datetime NOT NULL,
-
PRIMARY KEY (`id`)
-
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
-
CREATE TABLE IF NOT EXISTS `task_items` (
-
`id` int(10) unsigned NOT NULL auto_increment,
-
`task_category_id` int(10) unsigned NOT NULL,
-
`user_id` int(10) unsigned default NULL,
-
`name` varchar(128) NOT NULL,
-
`description` text NOT NULL,
-
`status` tinyint(3) unsigned NOT NULL,
-
`created` datetime NOT NULL,
-
PRIMARY KEY (`id`),
-
KEY `task_category_id` (`task_category_id`,`user_id`)
-
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Taigi, turime du modelius – TaskCategory ir TaskItem.:
-
class TaskItem extends AppModel {
-
var $name = 'TaskItem';
-
-
var $belongsTo = array(
-
'TaskCategory' => array(
-
'className' => 'TaskCategory',
-
'foreignKey' => 'task_category_id',
-
'counterCache' => 'items_count',
-
'counterScope' => 'status = 0'
-
)
-
);
-
}
-
class TaskCategory extends AppModel {
-
var $name = 'TaskCategory';
-
-
var $hasMany = array(
-
'TaskItem' => array(
-
'className' => 'TaskItem',
-
'foreignKey' => 'task_category_id',
-
'dependent' => true,
-
)
-
);
-
}
Šiuo atveju žiūrim į TaskItem modelyje ‘counterCache’ => ‘items_count’ ir ‘counterScope’ => ’status = 0′ nustatymus. Pirmasis nurodo lentelės lauką kur bus saugojamas įrašų kiekis, antrasis nurodo, jog skaičiuoti tik tuos, kada TaskItem.active lygus 0 (darbas neatliktas).
Viskas, nuo šiol nereiks atskirai skaičiuoti kiekvienos kategorijos neatliktų darbų kiekio papildomomis užklausomis bei funkcijomis. Tuo pačiu gauname optimizuotą sistemą.



2009.07.02

