• Проект с нестандартной архитектурой. Как оптимизировать ajax сайт под SEO?

    ivankomolin
    @ivankomolin
    Если сайт нацелен и на пользователей и на seo, то именно таким он и должен быть - быстрым для пользователей, доступным для поисковых систем.
    Реализовал подобную систему и считаю это единственная возможность не создавать тормоза у пользователя из-за требований seo-специалистов.
    Но нужно понимать, что поисковые системы не стоят на месте и у них уже должен быть робот который умеет js. Поэтому главное правило, что в пределах одного урла и боту и браузеру с js должен отдаваться абсолютно одинаковый контент. Тогда проблем быть не должно.

    Особенности, которые были выработаны в ходе разработки:
    1. Перезагружать совсем уж мелкими кусками не стоит, т.к. это добавляет нагрузку на клиент в виде сложной логики. Чем проще js на клиенте тем лучше. В итоге от мелких кусков пришли к 2м кускам: Статическая часть и динамическая часть.
    2. Html формировать на сервере. Самый удобный вариант для клиента.
    3. Шаблон одной и той же части должен быть один как для бота так и для браузера с js. Легче поддерживать. А благодаря пункту 2 это становится проще простого.
    Ответ написан
    1 комментарий
  • На чём лучше прокачивать архитектурный навык разработки моделей предметной области и принципов DDD вообще?

    mitaichik
    @mitaichik
    Напишу то что вы происили не писать.

    DDD с фреймворком ну никак не связан. DDD про то какой объект бизнес-логики за что отвечает, как построить взаимосвясь объектов. Как перенести модель из реальной жизни в объекты и их методы. Это про бизнес-логику, бизнес уровень. В меньшей степени - про растаскивание по слоям, по уровням. В любом случае, для него не столь важно на какой инфраструктуре (читай - фреймворке) вы будете это реализовывть.

    В вашем же вопросе намешано все вместе.
    Ответ написан
    7 комментариев
  • На чём лучше прокачивать архитектурный навык разработки моделей предметной области и принципов DDD вообще?

    @jacob1237
    Как это реализуется на Laravel? Или может мне с такими запросами и не он нужен?

    Никак не реализуется

    Кроме того, установленный ларавель с его фасадами фасадами как то не сильно сдружился с PHPStorm.

    Для этого существует плагин Laravel IDE helper.

    DDD - просто подход к конструированию архитектуры приложения, его можно реализовать с помощью любого фреймворка.
    Другое дело что некоторые фреймворки/библиотеки могут существенно упростить применение такого подхода.

    Чтобы полноценно работать по DDD, Вам необходимо как можно больше абстрагироваться от кода, ответственного за техническую часть (работа с БД и прочее). В этом как раз помогут паттерны Repository, UnitOfWork, DataMapper и т.д.

    Эти шаблоны уже реализованы, например, в ORM Doctrine. В Laravel же по-умолчанию в качестве слоя БД используется ActiveRecord, который применяется преимущественно в целях RAD (rapid application development).

    Если очень хочется Laravel, можете попробовать AnalogueORM. Это DataMapper-надстройка над Eloquent. Все остальное придется реализовывать ручками.

    Поэтому если хотите начать работать полноценно и сразу, берите Doctrine 2 (либо Hibernate для Java, либо SQLAlchemy для Python и т.д.) и что-то в придачу к нему (тот-же Symfony или любой другой веб-фреймворк с инверсией контроля).

    Если же хотите поразбираться каким образом все устроено на техническом уровне, берите AnalogueORM или нечто подобное и пробуйте остальное реализовывать вручную.
    Ответ написан
    2 комментария
  • На чём лучше прокачивать архитектурный навык разработки моделей предметной области и принципов DDD вообще?

    UnknownHero
    @UnknownHero
    Реализовывал принципы DDD на разных технологиях от Yii-1 до ASP.NET.
    Тут главное уметь разделять нужную логику в нужный слой. Иногда нужно отступить от мануала вашего фреймворка и дописать свой велосипед. Но потом это окупается.

    По Data Access Layer могу сказать, что нужно использовать паттерн Repository. В качестве основной реализации использовать родную для фреймворка ORM, затем всё равно так или иначе будете отказываться от ORM и писать более низкоуровневые запросы.

    По фреймворку - Lumen. Это Laravel для stateless REST API.

    О том как лучше понимать DDD. Кроме классических книг по этому вопросу могу посоветовать в поиске github ввести DDD или domain driven design. Там множество разных примеров на разных технологиях.
    Ответ написан
    3 комментария
  • На чём лучше прокачивать архитектурный навык разработки моделей предметной области и принципов DDD вообще?

    XAKEPEHOK
    @XAKEPEHOK
    Посмотрите записи вебинаров Дмитрия Елисеева, "Интенсив ООП" - очень рекомендую
    www.elisdn.ru/oop-week
    Ответ написан
    Комментировать
  • Объясните как работает php-fpm?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала почитайте что такое SAPI. Затем представьте что apache + mod_php разделили на web-сервер, который проксирует запросы на php-fpm и отдает статику, и собственно отдельный web-сервер который имплементит SAPI и выполняет запросы связанные только с php. То есть статику отдавать мы можем только через php. Суть примерно та же что и у apache2 + prefork + mod_php но оптимизированный только для работы с php. Так же можно поставить на фронт более быстрый и легковесный сервер который умеет проксировать запросы.

    То есть php-fpm это эдакий fast-cgi сервер который постоянно держит готовые для работы пул-процессов (сколько в пуле процессов настраивается, так же как и от какого пользователя их запускать и все такое прочее). Каждый новый запрос уходит в какой-либо процесс из пула, запрос отрабатывает, возвращаем результат тому кто попросил (web-серверу обычно). Если процесс падает (fatal допустим) - поднимаем новый.

    Принципиальной разницы между apache2+mod_php нету, просто упрощается инфраструктура. Наш web-сервер должен только уметь проксировать запросы и отдавать статику, а php-frpm вообще может быть на разных машинах (балансировщиком можно раскидывать запросы). Ну и сами понимаете, nginx + php-fpm будет быстрее обрабатывать запросы чем apache2+mod_php какой бы мы менеджер процессов не использовали в апаче. Минусов по сравнению с apache+mod_php я даже не могу предложить.

    А php-runtime не зависит от этого. Он один на всех, CLI, FPM, mod_php...
    Ответ написан
    7 комментариев
  • Как моделировать REST ресурсы и доменные объекты?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Предметная область понятие весьма расплывчатое. Так что возможно мы говорим о разных вещах, но все же:
    Все взаимосвязи и структура таблиц для REST не особо то будет отличаться от стандарных практик. Вам надо организовать все так, что бы этим было удобно пользоваться в рамках Yii и ActiveRecords. В БД таблицы user и phones и две модели, которые связаны между собой. И $user->phones в зависимости от hasOne или HasMany это будет объект или массив объектов. Вот такая схема и есть оптимальная для rest с yii2. Запросили телефоны, получили телефоны только или с связанными юзерами, запросили юзеров, получили юзеров с телефонами или без.
    У меня складывается впечатление, что у Вас много теории в голове, но yii вы видели мельком. Потому как проблемы в Вашей проблеме нет.
    Ответ написан
    Комментировать
  • На чём лучше прокачивать архитектурный навык разработки моделей предметной области и принципов DDD вообще?

    @xfg
    Любой фреймворк с инверсией зависимостей подойдет. На Symfony и Yii2 точно можно сделать. На русскоязычном форуме Yii по теме DDD очень много обсуждений. Но если не увидели единого согласия по DDD, то скорее всего не читали книгу Эванса или Вернона. Если так, то лучше начать с кого-нибудь из них.

    Многоуровневая архитектура рассказывает нам о слоях presentation, application, domain и infrastructure. С однонаправленным потоком данных. Нижестоящий слой, никогда не должен вызывать вышестоящий. Это значит, что к примеру можно выбросить presentation слой и не придется ничего изменять в оставшихся 3.

    Фактически выходит, что в любой момент можно выбросить фреймворк и заменить другим, так как это presentation layer в многоуровневой архитектуре. Можно даже сначала написать application/domain, проверить их юнит-тестами, а только потом уже задуматься о фреймворке. Application/domain слои никогда ни при каких обстоятельствах не должны вызывать методы фреймворка. Контроллеры фреймворка работают с доменной моделью, через вызовы методов application layer.

    Соответственно, при миграции на другой фреймворк, всё что потребуется, это переписать контроллеры (методы очень простые 1-5 строк) и реализации классов в infrastructure layer если вы завязывали их на фреймворк. Хотя лично я бы, не советовал этого делать. Лучше найти/написать отдельные библиотеки/компоненты под инфраструктурный слой, тем самым облегчив себе жизнь в будущем, когда фреймворк умрет или при очередном релизе мажорной версии.

    Symfony под DDD наилучший выбор, он компонентный, можно подтянуть только то, что нужно. С другой стороны Yii2, он монолитный и вы затяните Active Record и кучу всего еще, чем не будете пользоваться, но джуниор придет и обязательно понавызывает AR или чего-нибудь еще в application/domain слоях, чего вы явно не ожидаете. Поэтому в случае с Yii2 нужен будет тотальный контроль. :)

    Про Laravel не пишу ничего, так как не работал с ним. Но судя по беглому просмотру документации, никаких проблем сделать на нем DDD также нет.
    Ответ написан
    4 комментария
  • На чём лучше прокачивать архитектурный навык разработки моделей предметной области и принципов DDD вообще?

    AnisimovAM
    @AnisimovAM
    Программист
    Doctrine 2 очень даже хороший инструмент.

    Я бы вам порекомендовал использовать фреймворк Symfony 3. На PhpStorm поставить плагин Symfony plugin и PHP annotations.
    Ответ написан
    7 комментариев
  • Быстро зарелизить идею (ака чик-чик и в продакшн)?

    Andrey_Pletenev
    @Andrey_Pletenev
    Pletenev.com
    Для того, чтобы люди поняли и восприняли вашу идею нет необходимости начинать ее реализацию, тем более вы не собираетесь ее заканчивать.
    Более того, начальная реализация может создать дополнительные трудности у тех, кто будет доводить ее до конца, т.к. выбранный вами инструментарий может быть чужд для них.
    Вывод:
    1) Набираете в поисковике "Банк идей".
    2) Выбираете один из многочисленных банков.
    3) Кидаете туда описание своих идей.
    Ответ написан
    Комментировать
  • Быстро зарелизить идею (ака чик-чик и в продакшн)?

    @gimntut
    Всё уже придумано до нас.
    Посмотрите как работают heroku и netlify.com
    git push для публикации. При публикации автоматически подтягиваются все зависимости.

    Для нулевой итерации я использую следующую связку сервисов:
    бэкенд: scorocode.ru - всё приходится делать вручную, к тому же не самый качественный сервис, но зато есть нужный для меня функционал и русская тех.поддержка
    фронтенд: netlify.com - тут всё автоматизировано от и до.
    ui-фреймворк: webix - позволяет за пару минут накидать интерфейс любой сложности и к тому же имеет просто обалденную русскоязычную техподдержку.
    Логика на фронтенде, авторизация на бэкенде, язык - javascript.

    Это если не нужно работать с ОС. Но если вдруг понадобится ужимать картинки, распознавать текст, или читать из Excel, то однозначно выбор в пользу heroku.
    Ответ написан
    Комментировать
  • Полнотекстный поиск Yii для CRM. Как реализовать?

    kompi
    @kompi
    nullstack devoops
    FTS на mysql по определению очень медленный, а уж для CRM, которой явно не один человек будет пользоваться, да ещё плюс объём информации будет постоянно разрастаться - такие запросы будут ввергать в перманентные отвалы скриптов из-за ожидания окончания обработки mysql.
    Т.е. пытаясь обойтись не специализированным решением сейчас, вас ожидает большой геморрой в будущем.

    Мои мысли по реализации:
    Опишите бизнес логику fts в интерфейсах/абстрактных классах. Одну реализацию сделайте с помощью нативных средств mysql, другую - с помощью sphinx.
    Протестируйте первый вариант с демо данными приближёнными в объёмах к реальным. Т.е. найдите примерный объём, после которого начинается деградация в производительности. А потом добавьте в описание сrm примечание, что при достижении определённого количества данных/записей, рекомендуется подключить sphinx, иначе в работе с mysql будет значительная деградация производительности.
    Во-первых, клиент будет предупреждён, во-вторых будет сразу готова более или менее безболезненная реализация перехода fts от mysql к shpinx.
    Ответ написан
    2 комментария
  • Какую CRM использовать для отдела продаж?

    @litvin2
    На очень понятно, что в вашем понимании "автоматизация холодных и не холодных продаж".

    Попробуйте Битрикс24. Не очень удобная (если честно), но до 12 человек в компании бесплатно.
    Я всех своих клиентов на нее перевожу в том числе.
    Ответ написан
    Комментировать
  • Как продвигать SPA и RIA?

    Laiff
    @Laiff
    Front-end developer
    Да это так, однако сейчас проще использовать history api браузера и иметь совершенно обычные url. Коль тут еще стоит тэг react.js, то рекомендую посмотреть на роутер react-router. И нужно не забывать, что приложение нужно будет рендерить и на сервере по прямым запросам
    Ответ написан
    Комментировать
  • Как продвигать SPA и RIA?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Комментировать
  • Как написать функциональные тесты к REST full API?

    @matperez
    REST тестировать очень легко: делаете запрос, проверяете код и тело ответа. Запрос можно делать хоть через curl, если приспичит, но лучше взять что-нибудь по удобнее. Вот например: ole.michelsen.dk/blog/testing-your-api-with-phpuni...

    Для codeception еще вот хороший модуль есть для тестирования REST codeception.com/docs/modules/REST. пользовался им, удобная штука. Codeception еще удобен тем, что из коробки может работать с базой данных codeception.com/docs/modules/Db и вы можете тут же в тесте проверять изменилась ли в базе сущность, которую вы пытались изменить через REST интерфейс.
    Ответ написан
    4 комментария
  • Посоветуете правильную реализацию REST API средствами Yii+Backbone?

    @matperez
    Лучше пишите сразу на Yii2. Имхо, там удобнее с Rest работать. Все из коробки включая нормальную поддержку Bootstrap.

    Для аутентификации используйте JWT. На стороне Backbone как получите токен, просто добавляйте его во все запросы.

    YiiWheels вам не нужен - это реализации Bootstrap для Yii, а у вас интерфейс через Backbone будет реализован.

    Непонятно должна ли у вас и админка быть на backbone. Если нет, то все через Gii можно генерить.

    За красивостями AdminLTE template лучше не гнаться. Останется время, добавите.
    Ответ написан
    1 комментарий
  • Как вы строите архитектуру приложения?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Ответ написан
    Комментировать
  • Как вы строите архитектуру приложения?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Всё очень просто:
    1) Рисуете дизайн, чтобы представлять, какие данные нужны в системе и как с ними будет взаиомдействовать пользователь. Этого достаточно чтобы полностью описать структуры данных и на 90% функционал системы.
    2) Доописываете функционал, который не виден из интерфейса. Теперь у вас полностью готовы требования к системе и интерфейс.
    3) Рисуете архитектуру системы, схему взаимодействия модулей, рисуете схемы данных, бд, etc. Для тех, кто любит бюрократию - UML (и не важно, какого размера ваша система), либо же придумываете свою легенду и рисуете свои схемы, адаптированные под конкретную систему (проще и быстрее, как по мне).
    4) Делаете.

    Спрашивать про количество человеко-часов в отрыве от задач - глупо.
    Ответ написан
    1 комментарий