Это перевод блогозаписи "Can Laravel Be Used for Big Enterprise Apps?"

Вчера я слушал новый эпизод Laravel Podcast с Тейлором Отвелом (Taylor Otwell), Джеффри Веем (Jeffrey Way) и Мэттом Стаффером (Matt Stauffer) – и они (наконец-то!) поговорили про создание больших приложений на Laravel, в последнее время этот вопрос очень часто задают.

Подходит ли Laravel, достаточно ли он взрослый, для больших проектов?


Так как ребята из подкаста не предоставили стенограмму, и прослушивание 50 минут может быть излишним, я решил написать краткое содержание и разбить ответы в более удобном формате Вопрос-Ответ, с ссылками по теме. Поехали!

1. Что такое большое приложение?


Мэтт: Прежде чем погружаться в тему, давайте определимся, что такое Enterprise приложение? Это о количестве строчек кода, о зависимостях, или безопасности, или о нагрузке?
Джеффри: у меня тот же вопрос. Какие функции/возможности имеют фреймворки, которые делают их энтерпрайзными, а Laravel нет? Имеет ли значение, что Zend имеет за собой большую компанию, тогда как про Laravel все спрашивают «что будет, когда Тейлор умрет?»
Тэйлор: я думаю, что большинство людей имеет ввиду множество классов, и, я полагаю, большое количество кода.

2. Так можно ли использовать Laravel для больших приложений?


Тэйлор: очевидно, я собираюсь сказать да, он может быть использован для больших приложений, потому что:

  • Он уже используется для больших приложений, и мы знаем это.
  • Laravel хорошо подходит для любых приложений, для которых подходит PHP. Здесь все зависит от вас – как только дело дошло до Контроллера, вы можете делать всё, что пожелаете.
  • И еще я думаю что Laravel имеет уникальные преимущества и лучше подходит для создания больших приложений, чем другие PHP решения на текущий момент, по многим причинам. Главная — есть зависимости, сложность и DI в Laravel действительно хорош. Когда вы говорите о сложных приложениях, вы также имеете ввиду фоновую обработку задач, и Laravel единственный имеет встроенную систему очередей из всех основных PHP фреймворков. И еще, естественно, функции Event Broadcasting и другие, присущие большим приложениям.

Так что он не только может использоваться для больших приложений, он однозначно лучше подходит для больших приложений, чем прочие альтернативы на PHP.

Я понимаю, что это вводит в заблуждение, потому что Laravel имеет низкий порог входа. Но в тоже время он масштабируется в соответствие с вашими потребностями.

3. Люди иррациональны


Тэйлор: Между прочим, люди не выбирают фрейморк рационально. Много субъективных вещей. Может, им не нравится маркетинг, может они не любят дружелюбный стиль Laravel, так что они выбирают что-то более строгое, вроде Zend. Иногда им просто не нравлюсь лично я!

4. Мир энтерпрайза


Мэтт: говоря об энтерпрайзе, есть различия между большим и корпоративным проектом. У нас есть люди, постоянно говорящие «Генеральный директор, или совет директоров, или финансовый директор, или юристы, или кто-то еще из нашей многомиллиардной компании, очень обеспокоены тем, что мы собираемся вложить целую кучу времени и денег в Х», поэтому многие разработчики получают входные данные, не относящиеся к разработке, поэтому мне интересно, существуют ли какие-то ограничения, например, не использовать Laravel.

5. Приведите примеры больших приложений, использующих Laravel


Мэтт: давайте отойдем в сторону от энтерпрайза и поговорим о больших приложениях.
Я знаю, что мы не можем назвать много сайтов на Laravel. Я знаю несколько, потому что я под NDA с многими из них, и там тысячи миллионов посещений, из Alexa 500, много компаний из списка Fortune 500. Можем мы рассказать больше?
Тэйлор: различные сайты компьютерных игр, например, Fallout 4, используют Laravel на своих лендингах. Но основной вопрос – зачем людям нужны доказательства, что это работает? Доказательств всегда мало.

6. Дело не в фреймворке


Тейлор: Люди, возможно, хотят узнать: «если я создам свое большое приложение на Laravel, будет ли он вечно поддерживаться и обслуживаться, и … ?». Нет, Laravel не сделает автоматически ваше приложение крутым в поддержке в ближайшие 10 лет.

Фреймворк позволяет сосредоточится на вашем коде. Фреймворк — это маршрутизация, сессии, кеш, обращения к бд, но вы единственный, кто может описать специфику предметной области и знает проблемы бизнеса, которые намного сложнее, чем особенности фреймворка.
Мэтт: Плохой разработчик напишет плохой код на любом фреймворке.

7. Хорошо, как строить большие приложения?


Мэтт: Ну, предположим, люди согласны, что Laravel хорош. Как создать большое приложение, какие нюансы в приложении с миллионами просмотров в неделю?
Тэйлор: Достаточно просто. Убедитесь, что вы используете хороший драйвер для сессий и кеша, вроде Memcached или Redis, на сервере вроде Elasticcache на вашем AWS.
Вероятно, вам нужен балансировщик нагрузки, PHP очень хорошо масштабируется в этом смысле.
На уровне Laravel, убедитесь, что вы используете config:cache, route:cache, что вы сделали composer dump-autoload –optimize.
Джеффри: На Laracsts, который, внезапно, тоже хайлоад-проект, я не делал столько всего! Есть многие базовые вещи, которые люди полностью игнорируют, например, размеры их картинок!
Тэйлор: другая хорошая идея – отделить вашу БД от сервера приложения. Это позволит проще масштабироваться, например, если вам потребуется второй сервер.
И, говоря о кешировании, я много использую Cloudflare в последнее время. Весь официальный сайт Laravel жестко закеширован, только несколько запросов на самом деле достигают сервера, потому что почти все статично, например, документация.
Мэтт: С Cloudflare есть другая проблема: необходимо учитывать срок хранения, чтобы обновлять кеш. Так что это даже не проблема Cloudflare, а ваша – проверяйте Expires в заголовках!

Вместо заключения


Выслушав их мысли (спасибо, ребята!), я пришел к тому же выводу – что большие приложения это не про фреймворк, здесь есть еще много предметов для обсуждения: DevOps, механизмы кеширования, уникальная бизнес-логика вашего приложения, структура БД и так далее. Так что вопрос «Достаточно ли хорош Laravel?» — это неправильный вопрос. Лучше спросите, «Достаточно ли хорош мой код?», или «Достаточно ли у меня навыков использовать Laravel эффективно в большом приложении?». Если есть что добавить, то автор статьи принимает комментарии в своем блоге, и вот ссылка на сам подкаст.

От себя добавлю: сама суть обсуждения достаточно дискуссионна, и во многом я не согласен с категоричностью Тейлора (каждый поп хвалит свой приход, да), но основная мысль, которая сквозит через подкаст — плохой разработчик напишет плохой код, вне зависимости от фреймворка. Фреймворк лишь дает инструменты для того, чтобы сосредоточится на основном — бизнес-логике.

P.P.S: Об ошибках и неточностях сообщайте, пожалуйста, в личку.
Поделиться с друзьями
-->

Комментарии (49)


  1. debugger84
    14.05.2017 21:03
    +6

    После Zend 2 и Symfony 2 пришлось на новой работе работать с Laravel 5. Проект довольно большой по объему кода. Сначала думал, что проект плохо написан, после прочтения кучи статей — понял, что код проекта похож по стилю на код, который в любом примере по ларавелю можно найти (статические вызовы везде по коду, компоновка запроса к БД прямо из контроллера, да и где угодно по коду).

    Думал как улучшить код — ввести расслоение кода, прокидывать все зависимости через конструктор или сеттеры, а не вызывать статические методы фасадов, выкинуть Eloquent и подключить Doctrine 2, выкинуть блейд, разделить код на модули, чтобы по паре сотен файлов не лежало в директории с контроллерами и столько же с моделями. Но тогда не понятно что остается от фреймворка — получается такая себе Symfony 2.

    В итоге для себя решил, что все-таки Laravel не подходит для проектов с большим объемом кода, раз из него, в таком проекте, сильно хочется сделать другой фреймворк, значит тот другой — гораздо лучше подходит для организации кода в большом проекте.


    1. OnYourLips
      14.05.2017 23:45
      +3

      Аналогично делали. В итоге поняли, что от Laravel останется только набор компонентов, причём компонентов от Symfony будет больше.
      И Eloquent — это то, от чего в первую очередь надо избавляться, абсолютно неподдерживаемая библиотека.

      В итоге большой проект на Laravel — это просто Symfony с небольшим количеством Laravel-компонентов (очереди и т.д.)


    1. vlakarados
      15.05.2017 11:25
      +1

      На 100% моя ситуацния, правда, на тот момент еще с 4ой версией.


    1. TooZ
      15.05.2017 12:23

      Ни кто ведь не заставляет писать все в контроллеры, легко можно перенести всю бизнес логику в модель, валидацию вынести отдельно, поэтому и написано все зависит от того кто пишет. Хоть и в официальной документации конечно примеры не совсем по стандарту и новички начинают приучаться писать кривенький код.


    1. n1ks2n
      15.05.2017 14:31
      +1

      У меня для вас плохие новости, но то что вы описали как раз и является примером фрактала плохого кода. А именно ТТУК и прочие фишечки. Примеры кода в документации Laravel приведены as is с использованием Facades, которые в большинстве случаев не используются напрямую в правильном коде, для введения дополнительных объектов существует крайне умный DI, что так же повышает тестируемость кода. Структурированием кода так же занимается программный архитектор/ведущий разработчик/тимлид. Да Laravel дает довольно много свободы в плане написания кода и очень редко заставляет вас писать код по шаблону. Поэтому написание крупных, да и вообще нормальных проектов на Laravel требует серьезной дисциплины и понимания. Если вам требуется погонщик с хлыстом, чтобы не сходить с right way, то тогда Laravel не для вас. А вообще холиварить на эту тему можно долго, но статистика говорит об обратных цифрах. с 2015 года Laravel бьет все рекорды по популярности в мире PHP, как для пет-проектов, так и для рабочих, просто в Западном мире. И даже не стоит отрицать того факта, что платная подписка на Laracast дает кучу видеоуроков крайне полезных с best-practice разработки, где люди на пальцах рассказывают про TDD, BDD и грамотное проектирование и работу с проектом, которые кстати вы можете спокойно перенести в работу с другими фреймворками.


  1. Agel_Nash
    14.05.2017 21:31
    -1

    На Laravel действительно очень много сайтов.

    В том числе государственных и образовательных
    http://veterans.arkansas.gov/
    http://sailau.orda.gov.kz
    http://innovation.bsmu.edu.ua/
    http://iutoic-dhaka.edu
    http://beaufortccc.edu
    http://lstc.edu
    http://northwood.edu
    http://amda.edu
    http://aksaray.edu.tr
    http://statuschecker.fgdc.gov
    http://zhanakorgan.gov.kz
    http://tika.gov.tr
    http://istanbulhalksagligi.gov.tr
    http://teplo.gov.ua
    http://president.gov.ua
    http://pz.gov.ua


    1. samizdam
      14.05.2017 22:58
      +2

      Суть в том, что в интернете, на данный момент действительно много сайтов. И на ларавел достаточно. И на юии множество. И на симфоне, зенде до фига. И на, прости Господи, водпрессе просто многие миллионы, в том числе хайлоад, образование, гос.сектор ещё все угодно.


      1. Agel_Nash
        15.05.2017 16:49

        Своим комментарием я лишь хотел поделиться списком сайтов на Laravel


        1. SamDark
          15.05.2017 18:50

          Если не секрет, как был составлен список?


          1. Agel_Nash
            15.05.2017 20:23

            По наличию куки laravel для 4.х ветки и laravel_session для 5.х. Как правило, параметр config(session.cookie) редко кто переопределяет


    1. Code5
      15.05.2017 08:49

      что удивительно, очень много сайтов из KAZнета
      не ожиданно


  1. VolCh
    14.05.2017 22:31
    -2

    Как по мне, то одним из определяющих свойств современного энтерпрайз-реди фреймворка, является возможность сменить его частично (прежде всего уровень персистетности) или полностью на другие реализации, не затрагивая особо код бизнес-логики. Когда последний раз (давно) смотрел Ларавел впечатление сложилось, что всё очень сильно и жёстко связано.


    1. Fesor
      14.05.2017 23:41

      К Laravel вполне легко прикрепить что-либо другое для персистенса. Остальное не так критично и в целом норм. Меня дико напрягает структура самой ларавели и разбиение на модули, но не так плохо как было скажем в 4-ой версии.


      1. Big_Shark
        15.05.2017 03:24

        Разбиение на модули? О чем это ты?


        1. Fesor
          15.05.2017 12:25

          вопрос связанности. Зачем например моим ивентам знать что-то об очередях? Или же зачем очередям быть настолько завязанным на конкретной реализации компонента для консольных приложений? Или зачем вводить тупой нэймспейс Contracts, он особо бесит. Хотя возможно кому-то так проще жить.


    1. saggid
      15.05.2017 01:03
      +1

      Там же без особых проблем любую подсистему можно заменить, ибо всё на сервис-провайдерах построено, список которых задаётся в конфиге вашего проекта. Можно любой из сервис провайдеров заменить на свою собственную реализацию, такую, какая вам лично будет необходима.


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


      1. greabock
        15.05.2017 14:52

        Нельзя "без особых проблем" заменить службы маршрутизации и событий. Потому как эти базовые провайдеры загружаются на очень раннем этапе, и сам фреймворк очень сильно завязан на свою систему событий. Все остальное действительно подключается/отключается без танцев с бубном.


        1. saggid
          15.05.2017 18:42

          Если смотреть на код пакета Dingo\Api, то можно увидеть, что они не заменяют маршрутизатор Laravel, но вместо этого дополняют его своим собственным, что, похоже, тоже имеет право на жизнь.


          1. greabock
            16.05.2017 14:02
            +1

            Ну, Динго — вообще костылище, каких поискать. Количество "хаков" в этом пакете зашкаливает )
            Начиная с условного объявления классов, заканчивая подменой маршрутизатора в контейнере. Возможно, что большинство стандартных кейсов он покрывает без проблем, но нам он не подошел.


            1. saggid
              16.05.2017 17:50

              И вы решили писать всё самостоятельно?


              1. greabock
                16.05.2017 18:48
                +1

                Строго говоря, не так уж самостоятельно. Всё собирается из абсолютно тех же зависимостей (ну или почти тех же), но уже под своим соусом. Само собой, это самое "всё" решает именно наши задачи, без претензий на универсальность.


  1. Fesor
    14.05.2017 23:41
    +4

    Что такое большое приложение?

    мерять проекты количеством строк кода или классами — так себе. Я видел вполне себе огромные проекты которые на самом деле были просто кучей CRUD-а. И наоборот, небольшие проекты для которых приходилось держать довольно большую команду.


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


    Главная — есть зависимости, сложность и DI в Laravel действительно хорош.

    немного не понятно сформулирована фраза. Ну и чем это отличается от того же zend или symfony? то что DI контейнер в Laravel неплох — это факт. Ну а в symfony к примеру еще и анализ зависимостей можно провести в компайл тайм. Тут кому что нужно.


    встроенную систему очередей из всех основных PHP фреймворков

    не систему очередей, а возможность быстро их прикрутить. Для небольших проектов — золото. А для чего-то посерьезнее всеравно придется ставить доп пакеты с поддержкой amqp к примеру. Ну и опять же, сделать composer require в наши дни не так уж и сложно.


    Единственное что реально является плюсом — возможность событие прокинуть в очередь… и то, мне не очень нравится необходимость для этого имплементить интерфейс на уровне ивента. Проще подсунуть крутым контейнером зависимостей которй он расхваливает другую реализацию ивент диспатчера


    Иногда им просто не нравлюсь лично я!

    а вот это в точку.


    существуют ли какие-то ограничения, например, не использовать Laravel.

    вы тут как будто бы задаете вопрос. Конечно таких ограничений нет. Если мы говорим про рынок в Штатах то там это наоборот приветствуется. Маркетинг он такой а люди не иррациональны. Как-то раз нас клиент попросил заюзать neo4j хотя прямой необходимости в этом не было… просто клиент услышал что это круто.


    1. Приведите примеры больших приложений, использующих Laravel

    Лэндинги на laravel — большой проект, это уж точно. В целом лично я знаю парочку крупных проектов использующих laravel. Те кто не страдают — просто используют его только там где это уместно а все остальное и важное вообще на python реализовано. А дальше все от специфики зависит. Если приложение большое но оно тупо data-cetric то как бы все будет хорошо.


    1. Хорошо, как строить большие приложения?

    горизонтальное масштабирование и кэширование для чайника? мдя.


    «Достаточно ли хорош мой код?»

    достаточно ли он отделен от фреймворка.


  1. ellrion
    15.05.2017 12:07

    Наверное выражу непопулярное мнение, но лично мне Лара нравится именно "гибкостью" в плане подхода к коду. Т. е. на ней легко писать очень быстро маленькие приложения сильно отходя от академичных подходов (тобишь с долей говнокода). Прекрасно получается писать средние приложения возможно добавляя какие то свои архитектурные коснтрукции при этом так же местами забивая на академичность. Ну и ничего не мешает строить поверх свои архитектурные решения и идти страшным энтерпрайз путем) При этом вполне получается идти от первого к последнему рефакторингом.


    1. Fesor
      15.05.2017 12:23

      от академичных подходов

      меня всегда напрягает формулировка "академические подходы". Что это для вас, вот чисто ради статистики.


      1. ellrion
        15.05.2017 12:39
        +1

        Ну например SOLID. Прекрасный набор принципов. И Их соблюдение важно. Но тот же AR их нарушает весьма сильно (особенно S). И в небольших приложениях это дает простоту архитектуры и скорость разработки. То же самое и с внедрением зависимостей например в контроллеры. Я например отделяю для себя сервисы инкапсулирующие бизнеслогику и сервисы окружения так сказать. И вот их я явно не буду пробрасывать через внедрение зависимостей а могу просто использовать хелпер (например view) или или извлеку из контейнера прямо в коде метода. И т. д.


        1. Fesor
          15.05.2017 17:51
          +1

          Но тот же AR их нарушает весьма сильно (особенно S).

          зависит от контекста. Если AR используется исключительно как модель данных и не содержит бизнес логики, относится исключительно к persistence layer, то как бы я не вижу тут сильного нарушения SOLID.


          Другое дело что люди начинают пихать туда бизнес логику… для простых случаев, коих большинство, все будет хорошо. Но как только у нас набирается весьма сложная бизнес логика требующая работы с графом объектов, AR будет только мешать.


          Но тут проблема не с AR, есть куча других подходов. например row data gateway который можно применить для устранения проблем с AR и получить вполне изолированную логику. Проблема в людях которые просто привыкли использовать один инструмент и не рассматривают другие варианты. И это могу вам сказать серьезная проблема и я понятия не имею как это лечить. Это как юзать ORM там где удобнее взять SQL и наоборот.


          Так же сам по себе принцип SRP весьма бесполезен. Лучше на OCP концентрировать внимание так как цель SRP как раз таки OCP. У меня порой складывается впечатление что SRP был добавлен в SOLID тупо что бы получалось SOLID а не OLID.


          а могу просто использовать хелпер (например view)

          это сервис локатор. И если ваш фреймворк умеет дабл диспатч в контроллеры (laravel например) то через DI это проще и легче контролировать что в контроллерах ровно то что надо а не все подряд. Скажем в symfony этого из коробки нет, хотя с версии 3.3 можно будет за 10 строк добавить.


          или или извлеку из контейнера прямо в коде метода.

          Это более чем "академично". Просто не так удобно. Но явно удобнее чем "контроллеры как сервисы".


          1. SamDark
            15.05.2017 18:56

            Что значит "сильного" нарушения SOLID? Или нарушается или не нарушается. AR по определению его нарушает и создан чтобы его нарушать. Мы тут не говорим про то, в каком что слое используется и дёргается ли ->save() по поводу и без.


            Проблема в людях которые просто привыкли использовать один инструмент и не рассматривают другие варианты. И это могу вам сказать серьезная проблема и я понятия не имею как это лечить.

            Заниматься просвещением в меру сил и возможностей. Больше вариантов не вижу.


            Так же сам по себе принцип SRP весьма бесполезен. Лучше на OCP концентрировать внимание так как цель SRP как раз таки OCP. У меня порой складывается впечатление что SRP был добавлен в SOLID тупо что бы получалось SOLID а не OLID.

            Так и есть. SOLID — маркетинговый ход нескольких известных консультантов, которые смогли продать старый-добрый cohesion/coupling под новым именем.


            1. Fesor
              15.05.2017 20:53

              AR по определению его нарушает и создан чтобы его нарушать.

              Вот скажите, если у меня объект реализующий AR тупо представляет таблицу в базе и не содержит никакой бизнес логики, какой из принципов SOLID он нарушает? SRP в данном контексте он не нарушает, так как у этого объекта одна единственная причина для изменений.


              Да, он нарушает — LSP. Но это можно пофиксить заменив наследование трейтом который будет делегировать логику другому объекту. Тогда у нас просто исчезнут "подтипы".


              Да, он нарушает DIP так как подразумевает глобальный доступ к зависимостям. Но опять же… можно реализовать сервис локатор который будет обращаться к адаптеру и тем самым мы будем иметь возможность подменить реализацию нижестоящую.


              Статические методы-фабрики которые работают с глобальным стэйтом — можно их убрать в отдельный компонент finder.


              Как по мне больше проблем от репозиториев с методом save чем от AR использующегося как data model. Хотя тут опять же от контекста зависит.


              старый-добрый cohesion/coupling под новым именем.

              именно так. Ну и еще information hiding и GRASP. С последним к слову грустно, про grasp мало кто знает. Не на слуху.


              1. SamDark
                15.05.2017 22:28

                Да, с этой точки зрения про AR и SOLID я раньше не думал.


          1. VolCh
            16.05.2017 08:05

            зависит от контекста. Если AR используется исключительно как модель данных и не содержит бизнес логики, относится исключительно к persistence layer, то как бы я не вижу тут сильного нарушения SOLID.

            Тогда это не AR. Смысл этого паттерна именно в совмещении бизнес-логики и логики хранения.


            1. Fesor
              16.05.2017 12:53
              +1

              ну да, это уже row data gateway)


      1. SamDark
        15.05.2017 14:58

        Подозреваю, я виноват в распространении формулировки. Под ней я всегда понимал «слепое следование паттернам и принципам, нужны они или нет».


        1. ellrion
          15.05.2017 15:12

          При всём уважении, не уверен, что схватил это выражение от вас)


          1. SamDark
            15.05.2017 15:22

            Значит не я один :)


        1. Fesor
          15.05.2017 17:54

          а я это просто называют культом карго.


          1. SamDark
            15.05.2017 18:57

            Я тоже так называл, но было больше непонимания, чем когда я стал называть это "академичностью".


  1. SamDark
    15.05.2017 15:00

    Очень удивлён тем, что авторы Laravel не смогли привести примеров крупных проектов. У того же Yii примеры были ещё когда он был версии 1.0, а теперь есть ещё и каталог http://yiipowered.com/ru, где, конечно, далеко не всё, но крупные присутствуют.


    1. Fesor
      15.05.2017 17:52

      не смогли привести примеров крупных проектов.

      я думаю стоит посмотреть оригинальный подкаст, ибо что-то мне подсказывает что 80% информации упущено в тексте.


      1. SamDark
        15.05.2017 18:50

        Подозреваю, что так и есть надо будет послушать. Тейлор — прекрасный маркетолог и как любой маркетолог, должен был быть готов к этому вопросу. Поэтому я и удивился.


    1. Agel_Nash
      15.05.2017 20:40
      +1

      Альфа-форекс из каталога Yii сделан на OctoberCMS, которая базируется на Laravel. Вывод этот сделан на основе cookie, а так же по наличию пол года назад вот такой ошибки, характерной для плагина ProBlog.
      Так что актуальность каталога под большим вопросом.


      1. Agel_Nash
        15.05.2017 20:53
        +1

        Из крупных на Yii 1.x есть mts.ua, tass.ru, livecoin.net и т.д. Если кому-то интересно, то вот

        список (126) того, что мне удалось обнаружить на Yii 1.x
        magneticsystem.biz
        modelcard.biz
        traveling.by
        beorganic.by
        autotovar.by
        evna.by
        cian.bz
        keep2share.cc
        escape2poland.co.uk
        villabaku.com
        vagondom.com
        luuk.com
        pechatnick.com
        solar-staff.com
        recordrentacar.com
        sevas.com
        technosider.com
        skype-language.com
        sequenom.com
        gsmpress.com.ua
        tfd.com.ua
        doctorsam.com.ua
        artex.com.ua
        toys.com.ua
        atlant2k.com.ua
        sunshouse.com.ua
        pyha.fi
        tomsk.gov.ru
        arbalet.in.ua
        timeua.info
        goroskopy.info
        utes.krym.ru
        ng.krym.ru
        30let.krym.ru
        ndk.kz
        halykbank.kz
        islam.kz
        astana-motors.kz
        inkaraganda.kz
        profinance.kz
        hyundai.kz
        mazhab.kz
        fanart-central.net
        telgraf.net
        socialchance.net
        livecoin.net
        odpublic.net
        mafii.net
        capitalist.net
        hit-season.net
        cor.org
        artalbum.org.ua
        lipetskcity.ru
        medialipetsk.ru
        tass.ru
        milady-24.ru
        psyonline.ru
        postila.ru
        rivierarealty.ru
        lapana.ru
        afkstroy.ru
        doc4web.ru
        cs-garant.ru
        9months.ru
        informpskov.ru
        aioncataclysm.ru
        romashka96.ru
        medi.ru
        tuning-parts.ru
        38mama.ru
        test-drive.ru
        arafnews.ru
        pozitivmag.ru
        lacywear.ru
        zapchastivoz.ru
        photosight.ru
        snyat-kvartiru-bez-posrednikov.ru
        1ul.ru
        word-to-html.ru
        2mm.ru
        karofilm.ru
        tripsmile.ru
        zasmeshi.ru
        city-mobil.ru
        zamos.ru
        uztt.ru
        pedigree.ru
        kurgan.ru
        mobi03.ru
        1pnz.ru
        lozahobby.ru
        krym.ru
        hellride.ru
        socialchance.ru
        zhonga.ru
        smapse.ru
        nasko.ru
        mz-clinik.ru
        nskgortrans.ru
        joystick.ru
        pxel.ru
        bazametrov.ru
        jessnail.ru
        zanostroy.ru
        autotuning-bmw.ru
        auto-camera.ru
        oliu.ru
        aioninfinite.ru
        avtoschetki.ru
        belwest.ru
        novostroy.ru
        bestactor.ru
        kniga-stroitelia.ru
        kuponator.ru
        elisdn.ru
        novostroy.su
        nedvizhimost.tk
        robinzon.tv
        apa.tv
        anifilm.tv
        1game.ua
        apltravel.ua
        hosting.ua
        mts.ua
        pay.vn.ua
        xn--80ajbzh4e.xn--p1ai


        1. SamDark
          15.05.2017 22:30

          ТАСС вроде на 2.0 уже...


      1. SamDark
        15.05.2017 22:29

        Сайт может и на October, но сама система на Yii. Надо будет URL там поправить и скриншоты, чтобы не путали...


        1. SamDark
          15.05.2017 22:35

          Поправил.


          1. Agel_Nash
            15.05.2017 23:13

            Спасибо. Дико не удобный ЛК этого альфа-форекса:-)


            1. SamDark
              15.05.2017 23:28

              Мне тоже не очень нравится… интересно, куда они фидбек на эту тему принимают...


              1. Agel_Nash
                15.05.2017 23:33
                +1

                Никуда. Им многие уже писали в службу поддержки через ЛК. На что приходят отписки в стиле «спасибо, мы учтем ваши пожелания». Время идет, пожелания не учитываются. Даже эту проблему с отображением служебной информации исправляли несколько месяцев.


  1. devg
    15.05.2017 16:23

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


    Для меня критерий применимости фреймворка для крупного проекта — степень следования рекомендациям PHP-FIG.


    1. SamDark
      15.05.2017 18:48

      PHP-FIG вообще никакого отношения к размеру проектов не имеет. Говорю как его участник.