xDMITRIYx
@xDMITRIYx

Как грамотнее писать вспомогательный класс для работы с БД в MVC?

пробую аписать вспомогательный класс для работы с БД. Пытаюсь писать по архитектуре MVC и мучаюсь таким вопросом - правильно ли в моделе убивать скрипт? К примеру функцию select класса можно написать так:
public function select($query){
	$result = mysqli_query($this->link, $query);

	if (!$result){
		exit(mysqli_error($this->link));
	}  else if (!mysqli_num_rows($result)) {
		$answer = false;
	} else {
		while ($row = mysqli_fetch_assoc($result)){
		$answer[] = $row;
		}
	}
	return $answer;
}

Но при этом в модели приходится использовать функцию exit(), на некоторых форумах мне попадалось такое мнение, что убивать скрипт в модели это плохо - такие полномочия стоит давать только контроллеру. Хотя какой смысл в дальнейшей работе скрипта если произошел сбой в работе с БД?
Можно написать функцию так:
public function select($query){
	$result = mysqli_query($this->link, $query);
	$answer = [];

	if (!$result){
		$answer[0] = false;
		$answer[1] = mysqli_error($this->link);
	}  else if (!mysqli_num_rows($result)) {
		$answer[0] = false;
		$answer[1] = 'Данные не найдены';
	} else {
		$answer[0] = true;
		while ($row = mysqli_fetch_assoc($result)){
		$answer[1][] = $row;
		}
	}
	return $answer;
}

Но тогда увеличивается вложенность массива и разбор ответа в контроллере уже куда более громоздкий и некрасивый. Кто поопытнее, подскажите пожалуйста - как правильно в таких случаях писать модели в MVC?
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
PravdorubMSK
@PravdorubMSK
тебе еще рано лезть в MVC.
почитай про исключения, для начала.
и вот тебе пример класса для mysql - в нем не должно быть никаких select-методов. ты все не правильно делаешь.
если в MVC лезешь, то почитай Фаулера и главу, описывающую источники данных (DataMapper, ActiveRecord и др) - без этих фундаментальных знаний лучше не начинать ничего писать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
Обработка ошибок? Не, не слышал.
https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D...
Ответ написан
Комментировать
SerafimArts
@SerafimArts
Senior Notepad Reader
Ходят слухи, что всякие die и exit вообще нигде нельзя писать, т.к. это прерывает нормальную работу ПО. А значит невозможно правильно отдать клиенту Response.

P.S. MVC в Web - это зло во плоти. Лучше посмотрите в сторону MVP (примерно как в Laravel и Symfony) или ADR (это как Laravel без контроллеров).
Ответ написан
ilyachase
@ilyachase
web-developer
Если проблема с БД - кидай эксепшн из модели.
Ловить можно в контрллере (например в базовом классе) и рендерить теплейт ошибки с текстом эксепшна.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы