建模相关模型(干模型、吻模型、瘦控制器模型和胖模型)


modeling associated models (DRY, KISS, SKINNY CONTROLLER AND FAT MODELS)

我有两个模型:

服务器

(属于从属服务器)

从属(有许多服务器)

在控制器中,我需要获取一个数组,其中包含有关服务器/从属服务器的信息(以及一些附加信息,例如不能在控制器中的业务逻辑)。我想在服务器模型中创建一个函数来构建数组,我需要从 Slave 获得的每个字段我只想调用这样的函数:

Model Server:
// I created this function for code easier to maintain
function getSlaveId($server_id){
    $this->id = $server_id;
    return $this->field('slave_id');
}
// Return the array that I need, with informations from Server and Slave
function getArrayByServerId($server_id){ 
    $slave_id = $this->getSlaveId($server_id);
    return array(
        'slave_name' => $this->Slave->getName($slave_id)
        // some other information that some did not even pull from some table..
    );
 } 

如您所见,我创建了一个函数来从服务器中提取字段,因为如果有一天它发生了变化,我只需要在一个地方进行更改......对于我正在考虑使用函数来拉取每个字段的奴隶也是如此。

所以,问题是:我应该通过每个字段的函数来获取 Slave 的信息,还是有另一种更好的方法可以做?(我几乎需要整个奴隶的表信息,除了一些字段。

您可以使用 Containable 行为,它将提取必要的信息,而无需像这样复杂的逻辑。使用这种行为,您可以发出这样的请求:

$this->Server->find('first', array('conditions'=>array(...), 'contain'=>array('Slave')));

这样你就不会让你的模型变得不必要的脂肪(他们:)健康),你会采取所需的东西。使用可包含的,您也可以获得特定字段。