Есть многослойная архитектура. Нужно передать исключение с нижнего уровня (БД), на верхний (UI). Между ними может быть еще несколько слоев абстракций. Нужно ли на каждом слое отлавливать исключения своего нижнего уровня, чтобы передать на свой верхний, или ловить на самом верхнем уровне сразу исключение самого нижнего?
Пример в в коде:
Controller{
function deleteAction($id){
$this->service->delete(id);
}
}
Service{
function delete($id){
$data = $this->repository->getById($id);
$this->repository->delete($id);
$this->fileStorage->delete($data['image_path']);
}
}
Repository{
function delete($id){
$result = $this->mysqli->delete($id);
if(!$result){
throw new NotDeletedRepositoryException('not deleted from db');
}
}
function getById($id){
return $this->mysqli->find($id);
}
}
Storage{
function delete($path){
$result = $this->fileSystem->deleteFile($path);
if(!$result){
throw new NotDeletedStorageException('not deleted file');
}
}
}
Варианты отлова.
Вариант 1:
Controller{
function deleteAction($id){
try{
$this->service->delete(id);
}catch(NotDeletedServiceException $e){
//обработка
}
}
}
Service{
function delete($id){
$data = $this->repository->getId($id);
if(!$data){
throw new NotDeletedServiceException('Not found in db');
}
try{
$this->repository->delete($id);
$this->fileStorage->delete($data['image_path']);
}catch(NotDeletedStorageException | NotDeletedRepositoryException $e){
throw new NotDeletedServiceException($e->getMessage());
}
}
}
Вариант 2:
Controller{
function deleteAction($id){
try{
$this->service->delete(id);
}catch(NotDeletedServiceException | NotDeletedStorageException | NotDeletedRepositoryException $e){
//обработка
}
}
}
Service{
function delete($id){
$data = $this->repository->getId($id);
if(!$data){
throw new NotDeletedServiceException('Not found in db');
}
$this->repository->delete($id);
$this->fileStorage->delete($data['image_path']);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть форма, которая передаёт значения select-ов через POST-запрос, но надо к ним добавить ещё массив, который формируется в процессе создания этих...
Я загружаю файл audio через onActivityResult(), мне нужно его отправить на сервер (php) с помощью библиотеки volleyКак мне кодировать audio в строку base64