2010-07-23 4 views
0

Я часто сталкивался с этим, и мне всегда было любопытно, есть ли лучший способ.Каков наилучший способ решить эту проблему в модели?

Рассмотрим (пример только, предположим, что в конструктор OO запросов)

class Dogs extends Pets { 

    public function getAll() { 
     return $this->parseRows($this->db->get('dogs')); 
    } 

    public function getBig() { 
     return $this->parseRows($this->db->get('dogs')->where('size', '>', 10)); 
    } 

    public function getSmelly() { 
     return $this->parseRows($this->db->get('dogs')->where('smell', '=', 'bad')); 
    } 

    private function parseRows($rows) { 
     foreach($rows as &$row) { 
      $row['id'] = (int) $row['id']; 
      $row['categoryName'] = Categories::getById($row['categoryId']); 
     } 
     return $rows; 
    } 

} 

В принципе, мне нужно использовать много запросов к базе данных, но все они должны пройти через пост-обработки, чтобы назначить вещи их. Я использовал шаблон, как показано выше.

Это лучший способ для этого?

+0

Почему бы не использовать хранимые процедуры? – Jalal

ответ

2

Мне общественный интерфейс кажется приличным. Что касается реализации, есть много чего сказать, поскольку объектно-реляционные картографы являются одним из краеугольных камней современного программирования IMHO.

Если вы хотите узнать больше об альтернативных способах реализации ORM, я бы предложил посмотреть на инфраструктуру с открытым исходным кодом, такую ​​как Doctrine или ORM CakePHP.

Одна заметка, которую я хотел бы добавить относительно частной реализации: если Категории :: getById выполняет обратный вызов в базе данных, что является неэффективным, так как таблица со многими собаками приведет к (по крайней мере) вызовы, которые являются субоптимальными. Вот почему ORM, подобные упомянутым выше, позволяют разработчику определять ассоциации (например, у собаки есть категория) и автоматически генерировать операторы «LEFT JOIN».

+0

Спасибо за ваш ответ. Вы можете принимать статические запросы метода один раз, а затем удерживать результат в статической переменной :). В принципе, то, что я хотел знать, если выполнение всех моих результатов с помощью одной и той же функции было оптимальным с точки зрения дизайна. – alex

Смежные вопросы