Danyloff

Шаблон 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 позволяет легко добавлять новые методы и изменять логику работы приложения, не затрагивая код, отвечающий за работу с данными. Он также упрощает тестирование приложения, так как бизнес-логика может быть протестирована независимо от работы с данными.


Так же интересно

Оптимистическая офлайн блокировка

Оптимистическая оффлайн блокировка - это метод, который позволяет избежать конфликтов при одновременном доступе к ресурсам нескольких пользователей в оффлайн...