• Зачем бэкендеру веб-разработки нужно указывать как проектировать систему?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Все зависит от масштабов проекта, как говорится без ТЗ результат ХЗ.
    Если проект серьезный и компания тоже то там есть позиции аналитика, причем бизнес аналитика и системного аналитика, есть тимлиды и техлиды, есть фронтент разработчики и тестировщики, и тд
    Бюджеты приличные и штрафы тоже, поэтому для качественного выполнения задачи требуется специализированный специалист.
    Наверно и в больнице поэтому вас будет оперировать хирург, а не терапевт.
    Ответ написан
    Комментировать
  • Как лучше поступить при создании сайта?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Как человек имеющий опыт 15 лет, в разработке интернет-магазинов автозапчастей, скажу одно, вероятность успешной сдачи пректа близка к 0.
    Интернет-магазин автозапчастей это:
    Клиентская часть
    1. Поиск автозапчастей с использованием аналогов, синонимов производителей
    2. Динамическое ценообразование
    3. Каталоги запчастей оригинал и не оригинал, визуальное представление агрегатов для удобства поиска
    4. Личный кабинет, с возможностью отправки вин-запросов, истории заказов, добавлением машин, выставлением счетов
    5. Корзина с онлайн оплатами и отложенными заказами
    Админка
    1. Работа с заказами, клиентами
    2. Работа с поставщиками
    3. Загрузка прайс-листов поставщиков с различных источников
    4. Настройка ценообразования
    5. Управление логистикой
    6. Работа с каталогами товаров
    7. Работа со складом, складскими ячейками, приходы, отгрузки
    8. Выставление счетов, актов

    По сути это базовый функционал который требуется в 90% случаях. Как правило делаются на специализированных CMS
    Ответ написан
    2 комментария
  • Как работать с DI-контейнером?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    DI-контейнер это один из основных инструментов который должен быть в вашем приложении. Одно из правил SOLID это инверсия зависимостей, которая решается внедрением DI-контейнера с Автовайрингом для удобства.
    Уже много лет использую https://container.thephpleague.com/ и работа с зависимостями перестала был проблемой.
    Теперь по вашей задаче:
    У вас есть контроллер HomeController который должен иметь две зависимости, например UserRepository и Pagination.
    Какие зависимости должен иметь контроллер через абстракцию ? UserRepository потому что репозиторий это как правило класс который реализует слой хранения данных, который в свою очередь может меняться так как относится к слою инфраструктуры, поэтому у вас есть UserRepositoryInterface. Но вот к чему относится Pagination ? - к слою представления где у вас и находится контроллер, по сути использовать абстракции для него нет смысла, также как и для Response и Request и тд.
    Поэтому ваш код будет выглядеть так:
    class HomeCotroller{
    
       public function __construct(protected Request $request, protected UserRepositoryInterface $userRepository)
    
      }
      public function index(): Response { 
    
        $params = $this->request->getAll()
        //тут логика получения переменных
    
        $pagination = new Pagination($param1, $param2);
        $pagiationHtml = $pagitation->render();
    
        //тут логика построения html через шаблонизатор
    
        return new Response($html);
     }


    По поводу конфига с настройками: в DI контейнере есть возможность использовать singlitone объекты , создаете адаптер подключения к базе MysqlAdapter который в конструкторе берет настройки из вашего .env файла и создает соединение 1 раз. И дальше можете адаптер использовать его через инъекцию в ваши репозитории.
    Ответ написан
    Комментировать
  • Как должен выглядеть идеальный контроллер?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Request и Response на входе? для чего?
    public function update(array $args): Response {
        $payload = $this->request->getParsedBody() ?? [];
    
      if(!isset($args['id'])){
         return $this->buildNotFoundResponce();
      }
    
        // validate $payload HERE
    
        // find user, method return DTO object or throw exception
        $user = $this->userManager->getUserById((int)$args['id']);
    
        $this->userManager->updateUser($user, $payload['name'], $payload['location']);
    
        return $this->buildNotContentResponce();
    }
    Ответ написан
  • Какой сервис выбрать для структуризации идей?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    miro
    Ответ написан
    Комментировать
  • Как правильно организовать класс сервис, который будет использовать множество последовательных функций в рамках выполнения задачи?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Паттерн стратегия
    Ответ написан
    Комментировать
  • Как решить проблему Rich Model в DDD?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    DDD это больше про контекст чем про сущности, поэтому ваша модель должна быть в нескольких контекстах с разным поведением. Из описанной модели данных есть пользователь, заказ и скидка.
    Если брать контекст заказа, то там заказ будет больше всего иметь атрибутов, поведения и тд, а скидка там будет слаба выражена. Но если перейти в контекст "Калькулятор скидки", то там сущность скидки будет центральной сущностью, остальные сущности будут иметь атрибуты лишь необходимые для данного контекста.
    Почему отдельный контекст скидки? потому что чтобы ее рассчитать например не всегда и нужен заказ - скидка от группы пользователя (вип, гость и тд), местоположения, история заказов, категория купленных товаров и тд. В этом и преимущество от Service Layer, так как создав OrderService и метод calculateDiscount может получиться, что о заказе сервис будет знать совсем ничего, а вот от остальных сущностях очень много, а расположение уже определено.
    Ответ написан
    Комментировать
  • Как сделать интернет-магазин, в котором товары берутся из XML с другого сайта?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Здравствуйте. Можно создать сайт на WordPress а синхронизировать через partscanner
    Ответ написан
    Комментировать
  • Как правильно документировать разрастающуюся БД?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    1. Основная проблема документации ее поддержка. Когда документация отстает, то она больше мешает чем, помогает.
    2. Автоматизация создания доки, помню, использовал Interprice Architect для автосоздания диаграмм бд, в принципе помогало, но боюсь что использовалось только мной
    3. В обще кто то сказал что лучшая документация это код, поэтому соглашусь что если есть некий workflow по созданию бд, и есть миграции с описанием что делает та или иная таблица. Я использую Propel2 ORM там есть некий конфиг (chema.xml) которая описывает таблицы + разделения таблицы на пакеты/группы/контекст. Маленьким контекстом проще управлять.
    Ответ написан
    1 комментарий
  • Парсинг товаров с WooCommerce. Есть ли решение?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    PartScanner - можно им воспользоваться
    Ответ написан
    Комментировать
  • Как вести базу знаний всех обновлений, исправлений и изменений, вносимых в проект?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    1. Формировать задачи в трекере, например gitlab
    2. Использовать релизы
    3. С выходом релиза фиксировать задачи/фикс багов, релиза в CHANGELOG.md
    Ответ написан
    Комментировать
  • Как исправить GROUP BY?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    [mysqld]
    sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
    Ответ написан
    Комментировать
  • Как добавить реферальную систему на сайте?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Сохрани в сессию
    Ответ написан
    Комментировать
  • Обязательно ли писать собственную CMS если пишу сайт на фреймворке Yii 1.1?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Свою писать можно, но это долго и муторно, но зато интересно. В любом случае вы будите базироваться на уже готовых библиотеках которые себя хорошо зарекомендовали, а также многие фреймворки их используют: fast route, league container, league fractal, twig, monolog, symfony debug, symfony request, symfony console и ORM.
    В основном, я по крайней мере обращаю внимание при работе с фреймворком это ORM. Так вот ни в одном нет нормальной ORM, более менее нормальная это doctrine orm, но она сложна. Мой выбор это Propel2 ORM.
    Я свою CMS начинал писать на основе этого репо https://github.com/mmeyer724/Frameworkless
    Ответ написан
  • 5 000 000 статей возможно на Джумле?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    в обще не думайте о преждевременной оптимизации, можно создать 5млн записей в бд и посмотреть как будет вести себя движок, как посоветовали выше, а можно оптимизировать движек. Но по статистике когда речь идет о таких объемах зачастую уходят с джумлы.
    Ответ написан
    4 комментария
  • Как правильно построить архитектуру?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    1. Создал сервис ReportService. - правильное направление, но могут возникнуть проблемы когда ReportService использует UserService а UserService использует ReportService. Тут необходимо разделение сервисов на уровня приложения Aplication Services и доменных Domain Services, первые могут использовать domain services, вторые не должны использовать aplication services. Есть еще вариант организации бизнес логики через Command и Handlers.
    2. DTO
    Ответ написан
    Комментировать
  • Стоит ли использовать phpdoc для описания методов, если я использую тайпхинт и указываю возвращаемые значения?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    есть смысл если Вы используете генерацию документации
    Ответ написан
    Комментировать
  • Как сделать корпоративный портал с функцией личного кабинета?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    портал для собственников жилья? ) берите фреймворк + тема админки или например october CMS на Laravel
    Ответ написан