• Что можно использовать от фреймворка в DDD?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    ваше направление и мысли полностью совпадают с моими, поэтому дополню то что уже писал k2lhu
    DDD это больше про агрегаты и контекст, может вам нужна гексогональная архитектура и все что связанно с clean architecture. Принцип простой, ваша бизнес логика не должна зависеть от деталей реализации, попробуйте написать код без фраймворка например сохранение , отображение простых сущностей, пользователей. У вас будет репозитории не работающие с базой а просто Mock-репозитоиии, но реализующие интерфейсы. Так у вас появится Domain layer и очень тонкий Infrastructure Layer. Далее попробуйте реализовать бизнес логику и сценариции для работы с вашими сущностями, например регистрация пользователя, у вас появится Application Layer. Далее вам нужно организовать контроллеры или модули который будут отображать элементы интерфейса, вы создадите контролеры, вьюхи, модули(виджеты) и тд. например форма регистрации пользователя, так у вас появиться Presentation Layer. Далее вы переведете на динамику ваши репозитории, адаптеры и реализуете сохранение ваших пользователей в базу с помощью Activerecord или DataMapper. Так появиться Infrastructure Layer.
    Плюсы, бизнес логика не зависит от фраймворка, на каждом этапе слоя вы можете подключать фраймворк на уровне как минимум в Infrastructure Layer, Presentation Layer. При смене фраймворка будите менять только их.
    Тесты можно внедрять без проблем особенно на уровне домена и бизнес логики.

    Золотые слова дядюшки Боба:
    Когда вы пишите приложение на фраймворке для заказчика вы гарантируете разработку приложения и его поддержку в течении жизненного цикла, но какую гарантию дает вам разработчик фраймворка?
    Ответ написан
    Комментировать
  • Как правильно выносить логику из моделей?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Я использую CommandBus и Command для организации бизнес логики, изменения состояния сущностей, в Сервисах если и остаётся то только на получение данных
    Ответ написан
  • Софт для планирования проектов? Аналоги Microsoft Office Project?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    ganttpro.com
    Ответ написан
    Комментировать
  • Корректно ли передавать объекты (с приватными свойствами и геттерами) во view только для чтения?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    вытягивать сущности базы данных в слой представления это такое себе, измените поле и все шаблоны использующие накроются, причем накроются что вы не заметите например уведомление будет приходить клиенту а там пропадет его имя.
    поэтому я в вьюху стараюсь передать нужную структуру массив/DTO
    Ответ написан
    8 комментариев
  • Как быстро и безболезненно научиться проектированию в UML?

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

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    в луковой используется расслоение с минимум на три слоя:
    Domain - ваши Entity, RepositoryInterface, Service
    Application - бизнес логика приложения
    Infrastructure - реализация контрактов, драйверов,Repository

    Допустим есть необходимость коннектиться к стороннему api сервиса для обработки каких-то данных

    то-что вы описали это инфраструктура, где храните и как ваше дело, конфиги могут быть в ini файле могут быть в бд.
    Ответ написан
    Комментировать
  • Как останавливать заказчика при его поносе идей?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    перед сотрудничеством заключайте договор/ставьте в известность, что допустимы N попыток корректировки результата работ
    Ответ написан
    Комментировать
  • Можно ли в DTO указывать методы isName, isLimit?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    уже не DTO
    Ответ написан
    Комментировать
  • Можно ли отдать функции продажи - привлечения клиентов на аутсорс?

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

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    1. mirro
    2. draw.io отличный инструмент
    3. https://sparxsystems.com/ для всех кейсов которые вы описали
    Ответ написан
    Комментировать
  • Как создать поэтапный план разработки приложения?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Если весь процесс разделить на этапы то можно выделить:
    1. Анализ и сбор требований
    2. Проектирование
    3. Разработка
    4. Тестирование и ввод в эксплуатацию

    Анализ и сбор требований
    попробуйте выделить три уровня вариантов использования твоего функционала:
    1 уровень - цели проекта, например: Продажа товаров через Интернет-магазин,...
    2 уровень - пути достижения целей: Оформление заказа, управление корзиной, Авторизация, Регистрации клиента
    3. Команды которые реализуют кейсы из пункта 2: заполнение формы заказа, подтверждение формы, добавление товара в корзину, очистка корзины, изменение товара в корзине.

    цели уровня 1 помогут сконцентрироваться на результате, предоставить клиенту ожидаемые результат
    цели уровня 2 помогут выделить Варианты использования , роли, это как правило задачи которые отражаются в ТЗ
    цели уровня 3 это задачи разработчиков которые могут отражаются в техническом ТЗ или могут формировать спринт
    Ответ написан
    Комментировать
  • Архитектура проекта: как зависят папка vendor от Composer и GIT?

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

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

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    1. схема нормальная, работаем сейчас по аналогичной
    2. докер в любом случае поможет использовать одно окружение для все разработчиков, CI для проекта
    Ответ написан
    Комментировать
  • Как сделать класс управления записями?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    второй более норм, но есть моменты:
    1. это репозиторий, класс который сохраняет сущности в хранилище
    поэтому
    BookRepository
    2. create update сделать приватными и можно заменить на save
    public function save(Model $model): void{
       if($model->getId()>0){
          $this->update($model);
       }
       else{
         $this->create($model);
       }
    }

    3. public function initDatabase(PDO $db) - это контруктор
    public function __construct(PDO $db)
    4. public function get(Book $book) - что это? public function findById($id): ?Book - более правильно
    5. public function getAll() - правильных ход, но если 1млн записей, все вытащите? нужна критерия выборки и коллекция на выходе а не массив
    public function getAll(Criteria $criteria): BookCollection

    п.с вообще то если ООП то у вас Book должна быть богатой моделью предметной области в данном случае это Rich Model где поведение модели размазано по слоям
    Ответ написан
  • Существуют ли CDN для PHP библиотек?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    JavaScript мне нужен какой-то плагин

    нужно отталкиваться от цели которую преследуете, Например, если на JavaScript мне нужен какой-то плагин - не аргумент, все таки не забывайте php - серверный язык а пример вы берете практики из клиентского ЯП.
    Ответ написан
    Комментировать
  • Как лучше хранить спец цены если их 1000 для каждого клиента?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    два варианта:
    1. Статически. Запускаем скрипт который в бд формирует цены и хранит конечную.
    2. Динамически. Есть базовая цена и расчет конечной на лету.
    3. Совмещение 1 и 2

    по структуре
    товар - ценовая позиция
    Ответ написан
  • Почему Service Locator это зло и что использовать вместо?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Основные минусы:
    - В результате, между классом и его клиентом существует формальный или неформальный «контракт», который выражается в виде предусловий (требований к клиенту) и постусловий (гарантий выполнения работы). Однако если класс принимает экземпляр сервис локатора, или, хуже того, использует глобальный локатор, то этот контракт, а точнее требования, которые нужно выполнить клиенту класса, становятся неясными
    - Когда наш класс использует сервис локатор, то стабильность класса становится неопределенной. Наш класс, теоретически, может использовать что угодно, поэтому изменение любого класса (или интерфейса) в нашем проекте может затронуть произвольное количество классов и модулей
    - Самое страшное в Сервис Локаторе то, что он дает видимость хорошего дизайна. У нас никто не знает о конкретных классах, все завязаны на интерфейсы, все «нормально» тестируется и «расширяется». Но когда вы попробуете использовать ваш код в другом контексте или когда кто-то попробует использовать его повторно, вы с ужасом поймете, что у вас есть дикая «логическая» связанность, о которой вы и не подозревали
    - Для меня ясность и понятность интерфейса класса важнее количества параметров конструктора. Я не исключаю, что бывают случаи, когда сервис локатор является наименьшим злом, но я бы в любом случае постарался свести его использования к минимуму.
    Ответ написан
    Комментировать
  • Как реализовать алгоритм бонусов?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    function calcBonus(float $sumOrd):float {
    $bonusesSum = [
    1000 => 0.03,
    5000 => 0.05,
    10000 => 0.06
    ];
    $correct = 0;
    foreach($bonusesSum as $sum => $per){
        if($sumOrd >= $sum){
            $correct =  $per;
        }
    }
    return $sumOrd * (1 + $correct) - $sumOrd;    
    }
    print_r(calcBonus(10000));
    Ответ написан
    1 комментарий
  • Composer: как добавить приватный репозиторий в зависимости?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    вам необходимо развернуть satis, это что то вроде packagist.org
    satis на вашем сервере на основе конф.файла satis.json формирует дистрибутивы ваших приватных библиотек, и их заависимостей, так создает карту зависимостей.

    и больше вам нет смысла указывать "repositories": [
    {
    "type": "vcs",
    "url": "git@github.com:my/library.git"
    }
    ],

    просто указываете "my/library":"ver"

    ну и новый источник
    "repositories": [
    {
    "type": "composer",
    "url": "https://mysatis.ru"
    }
    ]
    Ответ написан
    Комментировать