• Как работает подход Unit of Work?

    @Flying
    Unit of Work - это паттерн определяющий логическую транзакцию т.е. атомарную синхронизацию изменений в объектах, помещённых в объект UoW с хранилищем (базой данных).

    Если обратиться к исходному описанию этого паттерна у Мартина Фаулера - то видно что объект, реализующий этот паттерн отвечает за накопление информации о том какие объекты входят в транзакцию и каковы их изменния относительно исходных значений в хранилище. Основная работа производится в методе commit() который отвечает за вычисление изменений в сохранённых в UoW объектах и синхронизацию этих изменений с хранилищем (базой данных).

    Паттерн Unit of Work как правило не является полностью самостоятельным, он обычно тесно связан с паттерном Identity Map, задача которого - сохранение карты созданных объектов, взятых из хранилища с тем чтобы гарантировать что одна единица информации из хранилища представлена ровно одним экземпляром объекта данных в приложении. Это позволяет избежать конфликтов изменений т.к. не допускает ситуации когда два объекта, представляющих один и тот же элемент данных в хранилище, изменены по-разному. Информация из Identity Map используется в методе commit() паттерна Unit of Work для вычисления разницы между исходными данными и накопленными изменениями.

    Поскольку для вычисления разницы (и, соответственно, определения того что и каким образом должно быть изменено в хранилище) необходимо знать какие данные и как именно хранятся в объектах - как правило необходима также реализация паттерна Metadata Mapping, описывающего связь между содержимым хранилища (к примеру таблицами и столбцами базы данных) и классами / свойствами объектов.

    Также, если данные в хранилище не являются независимыми (к примеру связи между таблицами в базе данных) - может потребоваться реализации ряда паттернов, отвечающих за сохранение информации о связях между данными (это паттерны раздела Object-Relational Structural Patterns в каталоге паттернов).

    Подводя итог: сам по себе Unit of Work довольно прост в своём внешнем интерфейсе, но реализация его корректной работы требует предоставления множества дополнительных данных, поэтому миниатюрных примеров привести не могу.

    Если говорить о PHP - то лучшей реализацией этих паттернов на PHP безусловно является Doctrine ORM. В частности в разделе Working with Objects документации Doctrine можно найти хорошее описание и множество примеров использования паттернов, описанных выше.
    Ответ написан
    6 комментариев
  • Какие курсы стоит пройти?

    @pacman123
    fullstack html developer
    Вопрос этот задается раз в неделю стабильно. Поиском научитесь пользоваться для начала, этот навык вам точно пригодится.
    Если по существу, курсы это трата времени. Есть мануалы и техдокументация.
    Если хотите с чего-то начать, пройдите базу на htmlacademy, потом перечитайте webref.
    И главное, как тут кто-то сказал - 20% теории и 80% практики.
    Ответ написан
    1 комментарий
  • Как не переборщить с желанием все спроектировать прежде чем писать код?

    t-alexashka
    @t-alexashka
    Сразу пишу legacy код
    Проектирование полезно. Особенно больших модулей. Не жалейте на него времени, это ускорит в дальнейшем разработку, и внедрение новых фич, когда вы уже наглядно будете видеть могут быть с этой фичей какие-то проблемы или нет. Да и после проектирования уже видно что на какие куски разбить при разработке.
    Ответ написан
    Комментировать
  • Программист с неоконченным средним образованием?

    inoise
    @inoise Куратор тега Карьера в IT
    Solution Architect, AWS Certified, Serverless
    Если ты умеешь думать и работаешь на результат то всем без разницы сколько у тебя там классов
    Ответ написан
    Комментировать
  • Разработчики, вы больше думаете, чем пишете, или наоборот?

    Stalker_RED
    @Stalker_RED
    В режиме "продумал, написал и заработало", на сам код уходит 10-20%% времени. Остальное - разобраться в уже существующем коде, в доках, погуглить, подумать, обсудить с коллегами или начальством.

    В режиме отладки печатается и кликается больше, но это все в прод не попадает же. Зачастую после поиска какого-то бага и написания кучи "одноразовых тестов" в коммит идет одна измененная строчка.

    В режиме "быстро клепаем демо/прототип/пруф-оф-концепт особо не задумываясь, разбрасывая по коду всевозможные TODO и давая переменным имена типа foo" - можно вообще нонстоп печатать. Ну точнее выходит около 70%, потому что иногда приходится таки голову включать или что-то читать.
    Ответ написан
    Комментировать
  • Бэкэнд разработчик на ноде, вкатывание?

    @spaceatmoon
    Дело вкуса. Я знаю JS, но совершенно не хочу вкатываться в nodejs. Зачем мне нода, когда и php решает те же проблемы?

    Мне лично нравиться в PHP, что есть на что опереться. Динамика развития стека средне динамичная и движется в правильном направлении, а не придумывает 100500 решений одной и той же проблемы. Есть решение - все его используют.

    Боязнь изучения другого языка в вашем случае не оправдана. Попробуйте Python/Java/PHP. Ознакомитесь где вот вам проще искать документацию, приятность синтаксиса, скорость разработки. Где вы решаете проблему из мира живого, а не из мира "Как эта штука работает".

    Я как-то хотел изучить Haskell, долго блуждал, но в итоге сложилось ощущение, что язык решает проблему для себя, а не для меня. Мне банально было неудобно всё в том языке. Даже родной редактор завершался с критической ошибкой...
    Ответ написан
    7 комментариев
  • Как понять вызов нескольких методов в одном экземпляре класса php?

    @Chupaka
    Только мне кажется, что жидкий интерфейс — это хорошо, но в данном примере речь вовсе не об этом?..

    $PHPExcel_file->getActiveSheet() возвращает объект Sheet, у которого дальше вызывается метод ->getCellByColumnAndRow('3', $i), возвращающий объект Cell, и уже у этого объекта вызывается ->getValue(), что и получает нужное значение.

    А пример fluent interface для PHPExcel был бы, например, таким:
    $objPHPExcel->getActiveSheet()->setCellValue('A1', "Here we go")
    ->setCellValue('A3', "Number:")
    ->setCellValue('B3', "10")
    ->setCellValue('A5', "List:")
    ->setCellValue('B5', "Item A");
    Ответ написан
    3 комментария
  • Firefox Quantum 58.0 плагины для анализа WebSoket?

    chupasaurus
    @chupasaurus
    Сею рефлекторное, злое, временное
    Никак, работа по поддержке WebSocket в Firebugконсоли всё ещё ведутся (тред на гитхабе).
    P.S. Текущая версия с ESR - 60, она же первая для Quantum, пора перебираться.
    Ответ написан
    2 комментария
  • Где найти словарик программиста?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    учите английский и набирайтесь опыта. Этот словарь растет быстрее чем вы успеваете учиться. И его никогда никто не составит
    Ответ написан
    Комментировать
  • На чем сделан сайт?

    e_snegirev
    @e_snegirev
    В исходниках страницы указано

    <meta name="generator" content="Web Presence Builder 17.0.16">
    Ответ написан
    Комментировать
  • Как вы учите программирование / новые вещи?

    opium
    @opium
    Просто люблю качественно работать
    Пробовали читать книги? Всегда работает
    Ответ написан
    4 комментария
  • Где нужен средний балл диплома?

    GavriKos
    @GavriKos
    Если в IT-сфере - то никому не нужен. Если не в IT - то хз, наверное по нему что то будут оценивать.
    Может еще в госконторах понадобится.
    Ответ написан
    Комментировать
  • Как мягко отказаться от выполнения тестового задания если выслал уже тонну примеров своего кода?

    GavriKos
    @GavriKos
    Сказать "я не готов к выполнению тестового задания потому что нет времени."
    Ответ написан
    Комментировать
  • Куда пойти учиться на разработчика в Москве?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    В Вузах не учат программированию.

    Поищите вакансии на джуниора. Почитайте требования. Прочитав 10-20 вакансий, усредните и у вас будет понимание что нужно учить, чтобы попробовать устроиться.
    Либо возможно вы сразу пробуйте попасть на интервью.
    Ответ написан
    Комментировать
  • Как пройти и собеседование и не спалиться?

    @frozen_coder
    Java-developer
    А попытка, обычно, только одна.


    Кто Вам такую чушь сказал? Не смогли сегодня, что мешает прийти ещё раз через пару месяцев, подтянув свои знания и поработав над ошибками?

    Попытка только одна у личностей, по которым можно с собеседования сказать, что работать с такой личностью будет неприятно и в коллектив она не впишется. Если Вы не такая личность, то Вам надо наоборот ходить по всем собесам, рекламировать себя, показывать своё желание развиваться и работать над собой, в случае если не дотягиваете сейчас. Вам вообще работа-то нужна?
    Ответ написан
    2 комментария
  • Как пройти и собеседование и не спалиться?

    GavriKos
    @GavriKos
    А попытка, обычно, только одна.

    Обычно - нет.
    Ответ написан
    Комментировать
  • Регулярные выражения, замена тегов?

    0xD34F
    @0xD34F Куратор тега Регулярные выражения
    А надо ли использовать здесь регулярки? Можно же и без них:

    str_replace([ '<div>', '</div>' ], [ '<b>', '</b>' ], $str)


    Конечно, если очень надо, то:

    preg_replace("/<(\/?)div>/", "<$1b>", $str)

    UPD. А если вдруг у тэгов могут быть атрибуты, тогда:

    preg_replace("/<(\/?)div(.*?)>/", "<$1b$2>", $str)
    Ответ написан
    Комментировать