Pa ta paradigma je svakako nešto čime bi trebao da se vodiš, jer business logici jeste mesto u modelu, ali ne moraš po svaku cenu, zbog neke stvari za koju npr. znaš da je nećeš reuse-ovati nigde drugde osim u tom kontroleru, da praviš klasu koja bi čuvala samo taj jedan metod. E sad, ako je to neki insert nad jednom tabelom, onda je pametnije da, bar zbog sebe, za svaku tabelu u tvojoj aplikaciji imaš i table gateway modele (klase koje se izvode iz Zend_Db_Table), pa da ih onda po potrebi iskoristiš za tako neki insert, update, fetch, itd.
A to metadata keširanje koje si spomenuo nema nikakve veze sa prethodnim delom tvoga post-a. To keširanje je i te kako preporučljivo, ja bih čak svrstao u obavezne stvari, jer to i te kako utiče na performanse. U pozitivnom smislu, naravno.

U suprotnom, svaki put kad praviš instancu nekog table gateway-a, i pri pokušaju npr. insert-ovanja podataka, biće izvršen
_setupMetadata() metod (pogledaj kôd tog metoda), koji će u slučaju da metadata nije inicijalizovan ili ako se podaci za njega ne nalaze u cache, raditi "naporan" DESCRIBE upit, kako bi pokupio informaciju o kolonama u određenoj tabeli. Najbolja varijanta, naravno bolja i od keširanja,

jeste da hardcode-uješ metadata te neke tvoje tabele, tako što ćeš u tvom izvedenom modelu redefinisati
$_metadata promenljivu (u njoj se nalaze ti podaci o kolonama) i ručno uneti definiciju tvoje tabele, npr.:
Code:
class Model_DbTable_Foo extends Zend_Db_Table
{
protected $_name = 'foo';
protected $_primary = 'id';
protected $_metadata = array(
'id' => array(
'SCHEMA_NAME' => null,
'TABLE_NAME' => 'foo',
'COLUMN_NAME' => 'id',
'COLUMN_POSITION' => 1,
'DATA_TYPE' => 'int',
'DEFAULT' => null,
'NULLABLE' => false,
'LENGTH' => 10,
'SCALE' => null,
'PRECISION' => null,
'UNSIGNED' => true,
'PRIMARY' => true,
'PRIMARY_POSITION' => 1,
'IDENTITY' => true
),
'title' => array(
'SCHEMA_NAME' => null,
'TABLE_NAME' => 'foo',
'COLUMN_NAME' => 'name',
'COLUMN_POSITION' => 2,
'DATA_TYPE' => 'varchar',
'DEFAULT' => null,
'NULLABLE' => false,
'LENGTH' => 100,
'SCALE' => null,
'PRECISION' => null,
'UNSIGNED' => null,
'PRIMARY' => false,
'PRIMARY_POSITION' => null,
'IDENTITY' => false
)
);
}