Шаблон Service Layer с примерами на PHP
- ·
-
Шаблон Service Layer — это популярный подход к организации бизнес-логики в приложении. Он позволяет разделить код, отвечающий за работу с данными, и код, отвечающий за бизнес-логику, что делает приложение более гибким и легко поддерживаемым.
В PHP шаблон Service Layer может быть реализован следующим образом.
1. Создайте интерфейс сервиса, который будет определять методы, необходимые для выполнения бизнес-логики. Например:
interface UserServiceInterface {
public function createUser(array $userData): int;
public function updateUser(int $userId, array $userData): bool;
public function deleteUser(int $userId): bool;
}
2. Создайте класс сервиса, который будет реализовывать интерфейс и содержать логику работы с данными. Например:
class UserService implements UserServiceInterface {
private $userRepository;
public function __construct(UserRepository $userRepository) {
$this->userRepository = $userRepository;
}
public function createUser(array $userData): int {
// Валидация данных
// Создание пользователя в репозитории
return $this->userRepository->create($userData);
}
public function updateUser(int $userId, array $userData): bool {
// Валидация данных
// Обновление пользователя в репозитории
return $this->userRepository->update($userId, $userData);
}
public function deleteUser(int $userId): bool {
// Удаление пользователя из репозитория
return $this->userRepository->delete($userId);
}
}
3. Создайте класс репозитория, который будет отвечать за работу с данными. Например:
class UserRepository {
public function create(array $userData): int {
// Создание пользователя в базе данных
return $userId;
}
public function update(int $userId, array $userData): bool {
// Обновление пользователя в базе данных
return true;
}
public function delete(int $userId): bool {
// Удаление пользователя из базы данных
return true;
}
}
4. Используйте сервис в контроллерах или других частях приложения. Например:
class UserController {
private $userService;
public function __construct(UserServiceInterface $userService) {
$this->userService = $userService;
}
public function createUser(Request $request) {
$userId = $this->userService->createUser($request->all());
return response()->json(['user_id' => $userId]);
}
public function updateUser(Request $request, int $userId) {
$result = $this->userService->updateUser($userId, $request->all());
return response()->json(['success' => $result]);
}
public function deleteUser(int $userId) {
$result = $this->userService->deleteUser($userId);
return response()->json(['success' => $result]);
}
}
Заключение
Шаблон Service Layer позволяет легко добавлять новые методы и изменять логику работы приложения, не затрагивая код, отвечающий за работу с данными. Он также упрощает тестирование приложения, так как бизнес-логика может быть протестирована независимо от работы с данными.