SiZE
Новичок
Меня мучает вопрос про наследование методов с запросами к БД...
Бывают модели со сложными запросами на несколько экранов, с джойнами на 100 таблиц, в которых может разобраться только автор запроса. Я запишу покороче для наглядности.
И тут приходит задача, что в этом запросе, для города Москва, например, надо сделать сортировку не по дате, а по названию.
В рамках проекта реализовано наследование модели для города. И вот тут возникает дилемма.
Процедурить
или ооопэшить?
Т.е. в первом случае мы получаем абсолютно нерассширяемую и неудобочитаемую конструкцию. Но которую легко поддерживать в будущем, т.е. правки происходят в одном месте и если общий функционал измениться, не надо помнить о том что его надо еще поправить и для каждого города.
А во втором случае все ясно и понятно, но если общая логика измениться, я должен вспомнить, что у меня есть дочерняя модель, в которой мне надо тоже что-то поправить. А таких моделей может быть много и придется тогда тестировать функционал в каждом городе.
Что выбрать? Может есть какой третий вариант?
Бывают модели со сложными запросами на несколько экранов, с джойнами на 100 таблиц, в которых может разобраться только автор запроса. Я запишу покороче для наглядности.
PHP:
class Model extends BaseModel {
public function getInformation(){
$sql = "SELECT id, title, date FROM table WHERE data>NOW() ORDER BY date";
$result = $this->db->findAll( $sql );
return $result;
}
}
В рамках проекта реализовано наследование модели для города. И вот тут возникает дилемма.
Процедурить
PHP:
class Model extends BaseModel {
public function getInformation(){
if ( REGION == 'moscow' ) {
$orderby = 'title';
} else {
$orderby = 'date';
}
$sql = "SELECT id, title, date FROM table WHERE data>NOW() ORDER BY ".$orderby;
$result = $this->db->findAll( $sql );
return $result;
}
}
PHP:
class Model_Moscow extends Model {
public function getInformation(){
$sql = "SELECT id, title, date FROM table WHERE data>NOW() ORDER BY title";
$result = $this->db->findAll( $sql );
return $result;
}
}
А во втором случае все ясно и понятно, но если общая логика измениться, я должен вспомнить, что у меня есть дочерняя модель, в которой мне надо тоже что-то поправить. А таких моделей может быть много и придется тогда тестировать функционал в каждом городе.
Что выбрать? Может есть какой третий вариант?