mysql — уровни приложений PHP

Я занимаюсь дизайном слоев приложения. В основном то, что я до сих пор:

  • Бизнес-требования
  • Архитектура: клиент-сервер
  • Технологии: PHP + MySQL, HTML5, JS, сторонние API

Мое приложение

  • Источники данных: базы данных MySql, сторонние API
  • Уровень данных: интерфейс с операциями CRUD, PDO для доступа к БД, классы, реализующие интерфейс CRUD, классы для связи с API
  • Репозиторий: Классы & Интерфейсы с бизнес-методами для доступа к источнику данных.
  • Бизнес-объект: объекты стоимости и бизнес-правила
  • Прикладной уровень: контролирует поток между уровнем данных и представлением.
  • Уровень представления: HTML-дизайн с JavaScript & Аякса & PHP-код. Взаимодействует с прикладным уровнем для извлечения данных

Реализация

Источник данных

  • 1x База данных MySQL
  • 1x сторонний API

Уровень данных

interface DSOps
{
/*
* @return array
*/
function read($sql);

/*
* @return array
*/
function readAll($sql);

/*
* @return boolean
*/
function save($sql);

/*
* @return boolean
*/
function delete($sql);
}



use PDO;

class DSSql implements DSOps
{
private $bd;

public function __construct( PDO $bd)
{
$this->bd =  $bd;
}

public function read($sql)
{
$stmt=$this->bd->prepare($sql);
$stmt->execute();
$response = $stmt->fetch(PDO::FETCH_ASSOC);
return $response;
}

public function readAll($sql)
{
$stmt=$this->bd->prepare($sql);
$stmt->execute();
$response = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $response;
}

public function save($sql, $params)
{
$stmt=$this->bd->prepare($sql);
return $stmt->execute($params);

}

public function borrar($sql, $params)
{
$stmt=$this->bd->prepare($sql);
return $stmt->execute($params);

}
}

Хранилища:

interface QueryClients
{
/*
* @return Client
*/
public function searchById($id);

/*
* @return array()
*/
public function searchAll();

/*
* @return int
*/
public function count();


}


class RepoClients implements QueryClients
{
private $ds;

public function __construct(DSOps $_ds)
{
$this->ds = $_ds;
}

/*
* @return array
*/
public function searchById($id)
{
$sql = " SELECT  * FROM clients WHERE id=$id;";
$response=$this->ds->read($sql);
return $response;
}

/*
* @return array()
*/
public function searchAll()
{
$sql = " SELECT * FROM clients; ";
$response=$this->searchAll($sql);
return $response;
}

....
}

У меня есть несколько модулей, которые реализуют один и тот же дизайн.
При реализации этих проектов у меня возникают следующие сомнения:

  1. Правильно ли формировать запросы в классах репозитория?
  2. Где я должен обрабатывать ошибки SQL? Наличие класса SQLError?
  3. Как мне обращаться с доступом к API?
  4. Поскольку мое приложение имеет доступ на основе ролей для пользователей, как это влияет на мой
    дизайн / реализация? Основанный на зарегистрированной роли пользователя, которую я создаю
    разные классы, использующие один и тот же интерфейс, но реализующие разные
    запросы к базе данных.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …