1 год назад
История
README.md
Новая версия IT-системы для Карси-Хоровац
- Это версия которую могу показывать работодателям, поэтому:
- Здесь данные БД и пользователей удалены, перед запуском их нужно указать согласно инструкции.
- В истории Гита будет скорее всего 1-2 коммита, а не вся история разработки, потому что я скопировал его из оригинального репозитория, чтобы скрыть оригинаьлные пароли и доступы.
- Оригинальный репозиторий могу показать по запросу, доступы не могу показать даже по запросу.
Система реализует функционал:
- Изменения и настройки меню (блюд в меню)
- Создания новых заказов для кассира
- Просмотр и управления заказами
- Интерфейс для просмотра списка и статуса заказов посетителями
- Интерфейс для просмотра заказов, их состава и нюансов приготовления поварами
- Систему контроля доступа, для разделения доступа к различному функционалу для разных пользователей
- Систему генерации отчетов по дням
- Систему просмотра отчетов по дням
-
Требования
- PHP 7.4+
- Composer 2.0+
- Любой сервер Apache или Nginx с поддержкой PHP
Установка
- Скопировать файлы приложения на серве в целевую папку
- Установить параметры вашей БД в файле /config/db.json
- Указать контакты отправителя в файле /config/params.json
- Указать пароли пользователей, а так-же сгенерировать accessToken’ы и authKey в файл /infrastructure/seeders/UsersSeeder.php
- (Для генерации accessToken и authKey можно воспользоваться Uuid-генератором с помощью команды: php yii uuid/get . Указать их надо вручную)
- Указать CookieValidationKey в файле /config/web
- Получить зависимости с composer’а коммандой: composer update –prefer-dist
- Настроить сервер на папку /web проекта
- Примеры NGINX скрипта и htaccess иструкций для apache есть в папке /deploy
- Проверить работу сервера зайдя на целевую страницу через браузер
- Провести миграции командой: php yii migrate
- Заполнить базу первичными данными командой: php yii seed/all
Архитектура приложения
- Приложение делится на 3 слоя:
- application - слой “приложения”:
- Файловая структура:
- assets - конфигурации наборов приложенных .js и .css файлов для различных типов страниц.
- base - общие предки и абстрактные классы для объектов слоя
- commands - контроллеры для CLI команд
- controllers - контроллеры, содержащие в себе:
- Usecase-инструкции на уровне ТакойТоКонтекст->СделайТоТо().
- Скрипты получения и проверки входящих данных (со стороны пользователя).
- Конфигурация VIEW файлов и виджетов.
- contracts - Интерфейсы сервисов, которые необходимы для работы слоя.
- forms - объекты отражающие бизнес-сущности в контексте конкретных задач создания I/O-интерфейсов для пользовтаеля:
- генерация форм;
- генерация таблиц;
- настройка виджетов;
- быстрая загрузка данных форм, полученных с помощью генерации.
- rbac - настройки пользовательского доступа.
- mail - VIEW-файля для оторисовки email’ов.
- views - VIEW-файлы для отрисовкис траниц в браузере.
- widgets - виджеты (повторяющиеся компоненты, включающие в себя собстввенную MVC структуру).
- Использование доменных сервисов:
- Каждый контролер должен содержать в себе в виде свойств свойства, необходимые для него сервисы соответствующие необходимым интерфейсам.
- Контроллер может использователь любые доменные сервисы, даже в рамкаж одного action’а
- Доменные сервисы из одной доменной области объединяются в ServiceKit’ы (объект типа “фасад”), откуда вызываются
- Инициализация доменных сервисов в фасаде происходит посредством DI-контейнера
- Доменные сервисы декорируют доступ к инфраструктуре - любой доступ к данным - только через них (исключение: использование сидеров)
- Файловая структура:
- domains - Доменные области.
- Каждая доменная область размещена в отдельной папке.
- Доменные области не связаны между собой.
- Доменные области состоят из:
- Доменных контекстов (название папки = название контекста):
- Домен делится по контекстам по границам аггрегации сущностей и области применения.
- Доменный контекст включает в себя:
- Репозитории для используемых аггрегированных сущностей, с четко-заданными границами аггрегации
- Доменный сервис который:
- Включает методы упраления доменом в конкретном контексте, где сущности имею конкретное значение и конкретные границы аггрегации.
- Методы доменного сервиса выполняют конкретную бизнес-задачу.
- Доменный сервис представляет собой синглтон.
- Доменный сервис представляет собой инфтрумент для решения бизнес-задач, должен выполнять контракт доменного сервиса, заданный в application-слое.
- По этой-же причине публичные методы доменного сервиса принимают в качестве параметра и возвращают только:
- Переменные базовых типов.
- Объекты из слоя application.
- entities - папка с сущностями
- В данной архитектура сущности анемичны, поэтому представленны только интерфейсами.
- Сущности получаются из инфраструктурного слоя посредством репозиториев или фабрик
- Контракт сущности выполняется в объекте тоже на уровне инфраструктурного слоя.
- Фаблики сущностей так-же представленны интерфейсами.
- exceptions - доменно-спецефические ошибки
- helpers - Хелперы:
- Т.е. все сущности анемичны все их свойства представленны переменными простых типов (кроме аггрегации)
- По указанной выше причине требуется инструмент для реализации доменно-специфической логики, связынной со свойствами объектов (кроме аггрегации).
- Каждый хелпер заменяет собой ValueObject конкретного типа, реализует соответствующую доменную логику.
- Каждый хелпер является статическим, используется только в рамках доменного слоя.
- tools - Инструменты для частных доменных задач
- Забирают в себя код более низкого уровня абстрацкии, чем уровень доменного сервиса.
- Служат для выполнения частных доменных задач.
- Доменных контекстов (название папки = название контекста):
- Список доменных областей:
- menu - управление меню, блюда в меню, настройка ингредиентов
- orders - управление заказами, блюда в заказах
- summary - сводка по дням
- users - пользователи, доступы и авторизация
- Репозитории и фабрики объектов на данном уровне представленны как интерфейсы. Их равлизация лежит на “инфраструктурном” слое.
- Фабрики и репозитории являются синглтонами
- Фибрики и репозитории подключаются посредством DI-контейнера
- infrastructure - Инфраструктурный слой:
- Содержит всю логику использования транспортов и хранилищ (в т.ч. БД)
- Файловая структура:
- activeRecords - Active Record’ы и в них реализация функционала бизнес-сущностей, которые требует от них доменный слой.
- factories - фабрики этих объектов которые представляют собой Active records + entities для передачи в использование в доменый слой.
- migrations - миграции
- repositories - репозитории, используемые в доменах для получения сущностей из хранилищ (БД)
- seeders - сидеры, для начальной инициализации БД.
- application - слой “приложения”:
- Прочие директории приложения:
- base - абстрактные классы, используемые в различных слоях
- config - конфигурации для фреймфорка
- deploy - скрипты и полезные файлы, которые могу использоваться в процессе развертывания
- runtime - временные объекты текущего артефакта
- tests - тесты
- vendor - подгруженные сторонние зависимости
- web - папка общего доступа. хранит в себе:
- index-файл - являющийся тчной фвхода в веб-приложение
- статическую графику
- сгенерированные пакеты asset’ов
- файлы css и js-скрипты
- шрифты
- robot-инструкцию для поисковиков
Лицензия
Любое использование ПО в коммерческих целях возможно только с разрешения разработчика и должно быть прекращено по первому требованию разработчика.
Контакты
Анатолй стародубцев E: Tostar74@mail.ru T: +7 999 586 5856
Конвейеры
0 успешных
0 с ошибкой