Link Search Menu Expand Document
07 Мая 2023 г.

Проектирование api

Содержание

Например, очень часто программисты любят запихивать данные одного функционала в один монолитный класс.

class Product
id
title
size
price
amount
order
class User
id
name
size
desc
active

Нужно уходить от этого, и дробить это на независимые контексты, независимые сервисы.

Модульное разделение кода

Делим класс Product на подклассы. В них будет информация которая нужна только для этого сервиса

Каждый модуль это не одна таблица или один класс, это может целый набор таблиц и классов

Склад
id - id товара
amount - стоимость
size - размер склада
Бухгалтерия
id - id товара
price - цена
Заказ
id id товара
amount - сколько заказали
Каталог
id - id товара
title - название
description - описание
photo - фото
Доставка
id - id товара(артикул)
size - размер
weight - вес
delivery - отдельная таблица
user - phone, address, email
Authentication
id - id user
login -
password -
Comment
commentator - отдельная сущность id user = комментатор
id - id комментария

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

Товар и пользователь при таком подходе хранится везде, а не в одной таблице.

Как это выглядит в коде

Модули могут называться следующем образом

  • Author
  • Blog
  • Comment
  • Data
  • Favorite
  • OAuth
  • Payment
  • Product
  • HTTP

В каждом модуле лежит набор директорий с классами, к примеру:

Модуль words работа со словами

   Words
    Entity - сущности
        Word - название сущности
            Word.php - класс сущности
            WordRepository.php - репозиторий сущности
    Command - команды
        Word - название сущности
            CreateWord - название команды
                Command.php - класс команды
                Handler.php - обработчик команды        

Например, класс Command.php. Это просто DTO.

<?php

declare(strict_types=1);

final class Command
{
    public function __construct(
        public string $name = '',
        public string $description = ''
    ) {
    }
}

Здесь самое важное, нужно строить структуру удобную в первую очередь нам!


Возник вопрос или предложение пиши на почту alexsey_89@bk.ru или в Телеграмм канал

Дата публикации: 07 Мая 2023 г.

Наверх

Последнее изменение страницы: 07 Мая 2023 г.