Здравствуйте. Скажите пожалуйста, как сделать метод для выбора данных в стиле MVC, что бы его бы легко удобно применять и просто расширять.
Мой вариант:
/**
* Менеджер подзадач
*/
class SubtasksManager
{
/**
* Получение подзадач
*/
public function getSubtasks($params = [])
{
$subtasksCriteria = new CDbCriteria;
/*
* Фильтрация по предопределённым критериям
*/
// Получение задач ожидающих выполнения
if (!empty($params['requires_performing'])) {
// Только выполняемые задачи (есть ещё связующие)
$params['type'] = '1';
// Задачи ожидающие выполнения
$params['performing_status'] = '1';
}
// Получение только задач в стадии подготовки
if (!empty($params['preparing'])) {
$params['performing_status'] = '0';
}
/*
* Фильтрация по определённым полям
*/
// Получение по идентификатору родительской задачи
if (!empty($params['task_id'])) {
$subtasksCriteria->addColumnCondition(['task_id' => $params['task_id']]);
}
// Получение по типу
if (!empty($params['type'])) {
$subtasksCriteria->addColumnCondition(['type' => $params['type']]);
}
// Получение по статусу выполнения
if (!empty($params['performing_status'])) {
$subtasksCriteria->addColumnCondition(['performing_status' => $params['performing_status']]);
}
return SubtasksAr::model()->findAll($subtasksCriteria);
}
В этом методе есть возможность получать как по предопределённым критериям, так и по определённым полям таблицы.
Вопросы:
1. Правильный ли это подход или лучше убрать получение по определённым полям таблицы из вне, ведь теряется гибкость скрипта, вдруг изменится название какого-то поля, тогда придётся менять его название во всей системе, в каждом файле.
2. Если например мне нужны получить подзадачи по определённому родителю, то в параметрах метода лучше получать только идентификатор родительской задачи или целый объект со всеми его данными? Второй вариант кажется более гибким.
Хочу узнать, правильно ли идёт ход моих мыслей или это очередной быдлокод