• Как в компоненте оформления заказа, сделать все блоки раскрытыми по умолчанию?

    @yopikin484 Автор вопроса
    Нашел готовое решение на маркетплейсе.

    И также как можно самому сделать - но какая-то муть.. похоже для старой версии было сделано.
    Ответ написан
    Комментировать
  • SWAGGER: что представляет из себя спецификация для rest api?

    delphinpro
    @delphinpro
    frontend developer
    1. Либо сначала разрабатывается спека, а потом пишется API. Это если у вас уже готовое подробное ТЗ есть.
    Либо пишется API и параллельно (либо после) документируется. В идеале — первый вариант. Мне приходилось работать только по второму.
    2. Это просто документация. Насколько строго вы будете валидировать данные - ваше дело. Тестирование — это тоже ваше дело, и другими программными средствами.
    3. Насколько я знаю — нет. Да и не представляю, что вы имеете ввиду. Нажать кнопку и получить готовый продукт? На каком ЯП? На каком фреймворке? Как-то фантастично. Вряд ли. Берете какой-то фрейм и пилите сами.

    Swagger — это вообще примитивнейший продукт для документирования API. Все что он делает — читает файл в формате OpenAPI и отображает его содержание в удобном для чтения формате. Ну еще запросы к API умеет выполнять для проверок. И всё.
    Ответ написан
    2 комментария
  • Как сверстать такой блок для меню?

    @cheeroque
    Ширина сайдбара у вас задана изначально, так что вообще никаких проблем:

    Ответ написан
    2 комментария
  • Как скрывать блок при onblur, но с небольшой изюминкой?

    beliyadm
    @beliyadm
    because open source matters
    Так что ли (не прописывал заполнение данных в suggests)
    Ответ написан
    3 комментария
  • Как передать в файл-шаблон, только одну переменную?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Мне кажется, что как-то так можно:


    почти, примерно как-то так:

    /** @param array $args */ 
    function render(): string
    {
        // Распаковка "виртуального" аргумента (массива) в набор переменных для шаблона
        \extract(\func_get_args()[0] ?? []);
    
        // Перенаправление stdout в буфер
        \ob_start();
        try {
            require __DIR__ . '/path/to/template.php';
        } catch(\Throwable) {
            // Что-то пошло не так...
        } finally {
            return \ob_get_clean(); 
        }
    }
    Ответ написан
    Комментировать
  • Документоориентированная или реляционная база данных (для моей задачи)?

    7workers
    @7workers
    можно хранить всё в одной коллекции:

    {
       "type": "полка",
       "size":{
          "width": 45,
          "height": 34
        }
    }
    
    {
       "type": "стена",
       "size":{
          "width": 11,
          "height": 500
        },
        "holes": 3
    }


    так что для хранения "зоопарка" и поиска по нему mongoDB подходит.
    если будут связи с другими таблицами, могут быть проблемы, потому что JOIN-ы сделать непросто.

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

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Вы бутстрап не используете, просто посмотрите как там сделана модалка. Там очень хорошо сделано. В двух словах
    Модалка идёт вместе с оверлеем, то есть класс модал при открытии имеет позишн фиксед, и на весь экран. При этом overflow-y: auto. Это оверлей. А в нем уже лежит сама модалка, и если идёт переполнение контентом то у оверлея появляется скролл. При открытии у боди оверфлоу хидден
    Ответ написан
    Комментировать
  • Как правильно: агрегация DTO-объекта, или дублирование свойств в классе?

    @galliard
    DTO вообще не должен в конструктор заходить, а разбираться при вызове конструктора, то есть:
    $order = new Order($orderDTO->orderId, $orderDTO->orderAmount);
    Ответ написан
    Комментировать
  • Интерфейс при наследовании метода: как правильно сделать?

    Adamos
    @Adamos
    Есть базовый класс User, от которого наследуются другие классы, например Admin.

    Зря. Админ - это не разновидность пользователя, это вполне определенная роль на сайте, связанная с конкретным пользователем. Наследование здесь не имеет смысла, логика администрирования сайта и пользователя сайта не пересекаются.
    Ответ написан
    9 комментариев
  • Интерфейс при наследовании метода: как правильно сделать?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Тут есть обсуждение
    https://stackoverflow.com/questions/39068983/php-7...
    Может стоит отказаться от статики и возвращать IUser ?
    Ответ написан
    2 комментария
  • Как правильно создавать объект-сущность?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    на самом деле выглядит громоздко, но в этом есть ряд приимуществ.
    1. вы не зависите от слоя хранения, получения
    2. легко накатить тесты

    попробуйте организовать вашу логику и работу приложения не концентрируясь на внешнем апи.
    1. создайте сущности+интерфейсы+исключения
    2. создайте тестовый репозитрий реализующий метод получения но с хранением объектов прямо в репо.
    3. реализуйите логику работы с репозиториями и сущностями
    4. покройте код тестами используя тестовый репо, проверьте работу приложения
    5. реализуйте репозиторий работающий с внешним апи, переключите работу приложения на него.

    из приемуществ: тестируемый код , маштабируемость в будущем.
    Ответ написан
    Комментировать
  • Является ли это исключительной ситуацией?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    В сущность должны передаваться конкретные параметры: $id, $login, а не массив $userData, из которого потребуется извлекать эти данные, проверять их тип и существование. При таком подходе вы можете использовать типизацию и будете уверены в переданных данных.

    Вы так же можете создавать сущность разными фабричными методами.

    Исключение должно быть в методе get() вашего репозитория. И не путайте методы find() и get():

    • find() — возвращает сущность или null.
    • get() — возвращает сущность или исключение.
    Ответ написан
    Комментировать
  • Как работает веб-сервер и php?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    У apache есть модуль mod_php, который обрабатывает код.
    У nginx\lighttpd модуля нет и им нужен отдельный сервис\сервер, которому они передадут код через TCP или unix soсket.
    Для php это php-fpm
    Ответ написан
    Комментировать
  • Насколько сложно сделать такое на mongodb?

    fomenkogregory
    @fomenkogregory
    Юниор софтварный инженер
    Да, очень легко делается и фильтрация и сортировка и пагинация и прочее. Почитать в документации можно. Вот курс (на 40 часов правда), тут все это объясняется в первых 100 уроках.
    https://www.udemy.com/course/nodejs-express-mongod...
    П.с. правда лектор душный иногда бывает. Начинает объяснять банальные вещи, приходится скипать, но в целом норм. + Если смотреть на х2 скорости, то не так уж и долго получается.
    Ответ написан
    3 комментария
  • Является ли это исключительной ситуацией?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А БД у вас глобально торчит в виде синглтона? Вы даёте id конструктору пользователя, и этот конструктор сам (!) лезет в БД (какую-то), что-то оттуда подтягивает, бросает исключения в зависимости от внешнего состояния...

    У какой-то другой сущности, к примеру у приложения, должен быть фабричный метод get_user. Он по идентификатору достаёт необходимые данные (этот код можно в классовый метод юзера поместить) и создаёт на основе этих данных инстанс юзера, например передавая все основные данные в конструктор.
    Ответ написан
    3 комментария
  • Паттерн Фабрика или Фасад?

    Insolita
    @Insolita
    Отчаянная домохозяйка
    Вообще-то в монологе есть каналы для этого
    https://github.com/Seldaek/monolog/blob/master/doc...
    А так же собственно, кастомные хендлеры/процессоры. В коде ты используешь стандартный логгер интерфейс, а что куда писать и слать разруливается кофигурацией монолога через di. А если его нет, то стоит задуматься именно о нём, особенно если в перспективе еще какие-то другие форматы и способы логгирования понадобятся - всё будет разруливаться в едином месте через доп. хендлеры/форматтеры и каналы при конфигурации логгера.
    Ответ написан
    6 комментариев
  • Какие сущности или слои должно иметь приложения такого формата?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Материнка.
    у нее комплектующие типа
    процессор
    память
    hdd
    Sdd
    usb
    и прочее.

    Но !

    Энтити
    это
    Материнка.
    процессор
    память
    hdd
    Sdd

    И вы уже в репозитории создаете служебный метод.
    GetCompatiblyCpu возвращающий процессоры совместимые с матерью.

    А уже на уровне выше вы собираете модель, которая содержит всю требуху.
    База она должна быть простая
    Ответ написан
    2 комментария
  • Когда применяем паттерн Стратегия, а когда Декоратор?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Стратегия = полиморфизм, то есть мы завязаны на некий интерфейс, а какая реализация — нам не важно. Это история про зависимости. Ну например почтальон отдает пенсию бабушкам (любым, какой бабушке именно — зависит от стратегии, КОТОРАЯ НЕ СВЯЗАНА с модификацией конкретной бабушки:)

    Декоратор, это про добавить функционал в рамках одного интерфейса, тут вообще не рассматривается вопрос каких-либо отношений (к примеру бабушки и почтальона), тут рассматривается — бабушка в шубе или бабушка с загаром или бабушка на коляске, все та же бабушка, но "обернутая" неким поведением :) Главное что бабушка всегда остается быть той самой для всех бабушкой. То есть это не противопоставление — ни в начале ни в середине мы не завязываемся на дополнительное поведение бабушки у почтальона. Бабушка и все, а какая именно — зависит от стратегии разноса (например по названию улицы). Если выйдет к нему "декорированная" бабушка-качок — пенсию он даст ей также, как и не качку, тк она для него всего лишь некий субъект/абстракция, главное чтобы возраст и ФИО сошлись.

    Соответственно это никак не похожие паттерны, один поведенческий, другой структурный... Они применяются всегда в любой этап разработки. Я в самом начале могу сделать декоратор обычной бабушки в виде поющей бабушки, а почтальона или внука в виде стратегии написать потом. А могу наоборот — сначала научить возить бабушек на трамвае (через стратегию), а бабушек с костылями (декоратор) добавить позже...

    Кое-где не корректные аналогии, и в аналогии стратегия есть бабушка, но в целом для понимания норм и не критично :)
    Ответ написан
    Комментировать
  • Является ли это (делегирование) нарушением принципа единственной ответственности – SRP?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Если в объекте Order будет зависимость ProductList, то не нарушает SRP, тк этот объект (судя по названию) VO и состояние этого объекта необходимо для работы Order.

    Но вызывает вопросы способ работы с ним:
    создавать отдельный метод getProductList, в котором будет инициализирован класс

    Почему не в конструкторе объекта Order? Или почему не из зависимости извне (DI) вообще получать товары?
    class Order
    {
         private ProductStorageInterface $products;
    
         public function __construct(ProductStorageInterface $products) 
         {
               $this->products = $products;
         }
         
         public function refundProduct(Product $product): void
         {
               // логика возврата товара 
               // и соответственно изменение  состава $this->products
         }
    }


    И товары могут подгрузиться из памяти, БД или АПИ внешней.
    Тут заодно и принцип инверсии зависимости

    UPD: Не называйте метод getProductList(), это ужасно! Называйте как есть: createProductList() или loadProductList(), ну в зависимости от логики.
    get -- слишком общее слово и совсем не говорит о том, что происходит. Если все кругом будет сервисами (service) с методами get, то вам весело будет жить...
    Ответ написан
    4 комментария