<MyRusakov.ru />

WordPress 6 с Нуля до Гуру

WordPress 6 с Нуля до Гуру

Этот курс научит Вас созданию самых разных сайтов на самой популярной в мире CMS - WordPress. Вы увидите установку и настройку локального сервера, разбор каждой настройки, каждой кнопки и каждого пункта меню в панели WordPress.

Также Вы получите и всю практику, поскольку прямо в курсе с нуля создаётся полноценный Интернет-магазин, который затем публикуется в Интернете. И всё это прямо на Ваших глазах.

Помимо уроков к курсу идут упражнения для закрепления материала.

И, наконец, к курсу идёт ценнейший Бонус по тому, как используя ChatGPT и создавая контент для сайта, можно выйти на пассивный доход. Вы наглядно увидите, как зарегистрироваться в ChatGPT (в том числе, и если Вы из России), как правильно выбрать тему для сайта, как правильно генерировать статьи для него(чтобы они индексировались поисковыми системами) и как правильно монетизировать трафик на сайте.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Чистая архитектура в PHP: пошаговое руководство.

Чистая архитектура в PHP: пошаговое руководство.

Чистая архитектура (Clean Architecture), предложенная Робертом Мартином (дядя Боб), представляет собой подход к проектированию программного обеспечения, при котором бизнес-логика отделена от технических деталей: базы данных, фреймворков, пользовательского интерфейса и прочего окружения. Такой подход повышает устойчивость, тестируемость и сопровождаемость приложений. В данной статье будет рассмотрено, как реализовать принципы чистой архитектуры на языке PHP.

Основные принципы Clean Architecture

Чистая архитектура опирается на следующие принципы:

  1. Разделение ответственности — каждый слой отвечает за свою часть логики.
  2. Зависимости направлены внутрь — внешние слои зависят от внутренних, но не наоборот.
  3. Независимость от фреймворков — бизнес-логика не зависит от Laravel, Symfony и других.
  4. Тестируемость — каждый компонент может быть протестирован изолированно.
  5. Изоляция от внешних систем — база данных, API, UI — всё это инфраструктура, а не ядро.

Слои архитектуры

Слой Описание
Frameworks Фреймворки, HTTP-контроллеры, UI
Interface Adapters DTO, контроллеры, репозитории
Application Core Use Cases, сервисы приложения
Domain Core Сущности, бизнес-логика

Пошаговое руководство по реализации

Шаг 1: Инициализация проекта

composer init
composer require --dev phpunit/phpunit

Шаг 2: Структура каталогов

src/
├── Domain/
│   ├── Entity/
│   ├── Repository/
│   └── ValueObject/
├── Application/
│   ├── UseCase/
│   └── Service/
├── Infrastructure/
│   ├── Persistence/
│   ├── Controllers/
│   └── Framework/
└── Shared/
    └── Kernel/

Шаг 3: Пример сущности (Domain Layer)

// src/Domain/Entity/User.php
namespace App\Domain\Entity;

class User {
    private string $id;
    private string $email;

    public function __construct(string $id, string $email) {
        $this->id = $id;
        $this->email = $email;
    }

    public function getEmail(): string {
        return $this->email;
    }
}

Шаг 4: Интерфейс репозитория

// src/Domain/Repository/UserRepositoryInterface.php
namespace App\Domain\Repository;

use App\Domain\Entity\User;

interface UserRepositoryInterface {
    public function findByEmail(string $email): ?User;
}

Шаг 5: Use Case (Application Layer)

// src/Application/UseCase/RegisterUser.php
namespace App\Application\UseCase;

use App\Domain\Entity\User;
use App\Domain\Repository\UserRepositoryInterface;

class RegisterUser {
    private UserRepositoryInterface $repo;

    public function __construct(UserRepositoryInterface $repo) {
        $this->repo = $repo;
    }

    public function execute(string $email): User {
        if ($this->repo->findByEmail($email)) {
            throw new \Exception("User already exists");
        }
        $user = new User(uniqid(), $email);
        // save to repository (not shown here)
        return $user;
    }
}

Шаг 6: Реализация репозитория (Infrastructure Layer)

// src/Infrastructure/Persistence/InMemoryUserRepository.php
namespace App\Infrastructure\Persistence;

use App\Domain\Entity\User;
use App\Domain\Repository\UserRepositoryInterface;

class InMemoryUserRepository implements UserRepositoryInterface {
    private array $users = [];

    public function findByEmail(string $email): ?User {
        foreach ($this->users as $user) {
            if ($user->getEmail() === $email) {
                return $user;
            }
        }
        return null;
    }

    public function save(User $user): void {
        $this->users[] = $user;
    }
}

Шаг 7: Входная точка (Framework Layer)

// public/index.php
use App\Application\UseCase\RegisterUser;
use App\Infrastructure\Persistence\InMemoryUserRepository;

require_once __DIR__ . '/../vendor/autoload.php';

$repo = new InMemoryUserRepository();
$useCase = new RegisterUser($repo);

try {
    $user = $useCase->execute('test@example.com');
    echo "User registered: " . $user->getEmail();
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

Clean Architecture в PHP позволяет проектировать приложения с чётким разделением обязанностей, снижая связанность компонентов и упрощая тестирование. Несмотря на то что PHP изначально создавался как язык для веба, он отлично справляется с реализацией архитектурных подходов, присущих крупным программным системам.

Такой подход особенно эффективен при построении долгоживущих и масштабируемых систем, требующих гибкости и поддержки на протяжении многих лет.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.