Можно ли использовать Laravel для больших Enterprise-решений?

Это перевод блогозаписи "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: Об ошибках и неточностях сообщайте, пожалуйста, в личку.
Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

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

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

    В итоге для себя решил, что все-таки Laravel не подходит для проектов с большим объемом кода, раз из него, в таком проекте, сильно хочется сделать другой фреймворк, значит тот другой — гораздо лучше подходит для организации кода в большом проекте.
    • +3
      Аналогично делали. В итоге поняли, что от Laravel останется только набор компонентов, причём компонентов от Symfony будет больше.
      И Eloquent — это то, от чего в первую очередь надо избавляться, абсолютно неподдерживаемая библиотека.

      В итоге большой проект на Laravel — это просто Symfony с небольшим количеством Laravel-компонентов (очереди и т.д.)
      • +1
        На 100% моя ситуацния, правда, на тот момент еще с 4ой версией.
        • 0
          Ни кто ведь не заставляет писать все в контроллеры, легко можно перенести всю бизнес логику в модель, валидацию вынести отдельно, поэтому и написано все зависит от того кто пишет. Хоть и в официальной документации конечно примеры не совсем по стандарту и новички начинают приучаться писать кривенький код.
          • +1
            У меня для вас плохие новости, но то что вы описали как раз и является примером фрактала плохого кода. А именно ТТУК и прочие фишечки. Примеры кода в документации Laravel приведены as is с использованием Facades, которые в большинстве случаев не используются напрямую в правильном коде, для введения дополнительных объектов существует крайне умный DI, что так же повышает тестируемость кода. Структурированием кода так же занимается программный архитектор/ведущий разработчик/тимлид. Да Laravel дает довольно много свободы в плане написания кода и очень редко заставляет вас писать код по шаблону. Поэтому написание крупных, да и вообще нормальных проектов на Laravel требует серьезной дисциплины и понимания. Если вам требуется погонщик с хлыстом, чтобы не сходить с right way, то тогда Laravel не для вас. А вообще холиварить на эту тему можно долго, но статистика говорит об обратных цифрах. с 2015 года Laravel бьет все рекорды по популярности в мире PHP, как для пет-проектов, так и для рабочих, просто в Западном мире. И даже не стоит отрицать того факта, что платная подписка на Laracast дает кучу видеоуроков крайне полезных с best-practice разработки, где люди на пальцах рассказывают про TDD, BDD и грамотное проектирование и работу с проектом, которые кстати вы можете спокойно перенести в работу с другими фреймворками.
          • –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

            Если сделать выборку по alexa, то тоже можно найти
            достойные экземпляры
            barchart.com
            elderscrollsonline.com
            ratel.kz
            nplus1.ru
            bitcomet.com
            unblockvideos.com


            Радует то, что Laravel используется по всему миру, а не только в какой-то конкретной стране или даже регионе. При этом, если верить Google Trends, то интерес к этому фреймворку только растет.

            Если кому-то интересно, то вот мой список доменов (429) на которых предположительно используется laravel
            hostineer.com
            blablaface.net
            keoghs.co.uk
            multilac.com
            help.aos.su
            espanabreaks.com
            mfo.org
            zagorod.su
            alternative-aquitaine.co.uk
            kids.histmuseum.by
            krinitsa.com.ua
            everest.ua
            auto-trail.co.uk
            communitybase.org
            elpalauet.com
            devas.com
            mingas.by
            lwo.by
            rv.campingworld.com
            sanatonline.net
            astrojump.com
            ashkom.ru
            kaznitu.kz
            magdsoft.com
            defensivedriversgroup.com
            anticvarium.ru
            guzel.net
            syndome.com
            zanotti.com.br
            tourcatalog.ru
            bettermadesnackfoods.com
            cosmoparking.com
            moveitstorage.com
            hopescookies.com
            manilastandard.net
            ztkruszwica.pl
            akelarre.net
            errantsurf.com
            capitalbank.kz
            dvatp.com
            flashreport.org
            medicalmutual.com
            gamegraveyard.net
            wegocamping.com
            firmfocus.biz
            books.astanakitap.kz
            affinityagency.co.uk
            damn.ru
            luxois.com
            podcastarabia.net
            nwselfstorage.com
            tattoodragos.com
            searchen.com
            tamba.co.uk
            euroec.by
            12-music.ru
            discoverpps.org
            storytoolz.com
            johnsonfit.com
            ctrivers.org
            enrabota.ru
            pythagoras.net
            softline.by
            stamps.iknobel.kz
            dannemann.com
            americandesigngallery.com
            ey-seren.com
            laika34.ru
            subscribers.pro
            dsvc.org
            hotel-moscow.ru
            spinney.co.uk
            dorfman-pacific.com
            market.umh.ua
            serlinassociates.com
            minsk-minsk.by
            realty-odessa.ua
            trofei.by
            cleverelements.com
            estorickcollection.com
            statutar.sk
            trinityhouse.co.uk
            newground.com
            kesfett.net
            the-dentist.co.uk
            nnc.kz
            hatton-garden.net
            scgis.org
            finlandia.com
            wizard-industries.com
            independenttrucks.com
            newportnewstimes.com
            origami.ru
            aspee.com
            wfxl.com
            snapa.org
            prodomov.ru
            taltour.com
            zhasotan.kz
            csgolime.com
            beachcomberhottubs.com
            toufee.com
            braintrauma.org
            technomarine.com
            ulfet-az.com
            rnr.com.ua
            satshop.co.uk
            ssidecisions.com
            emailcontact.com
            priefert.com
            tefen.com
            foxrichmond.com
            bitak.net
            livetweetapp.com
            pfl.ua
            factory-connection.com
            nageur-sauveteur.com
            hapert.com
            holidayrambler.com
            abbeville.com
            pride-net.ru
            lukpro.com
            mitfuso.com
            kimber.com
            cayhaber.net
            mediabrest.by
            internet-koleso.ru
            specialneedsanswers.com
            giordanacycling.com
            sturmey-archer.com
            happyskins.ru
            sriramakrishna.org
            sevastopolstroy.ru
            eastwestseed.com
            vologda-poisk.ru
            trafficmodels.com
            gethermit.com
            solucionespolycom.charmex.net
            malkelapagading.com
            lstc.edu
            ctvea.net
            thehotelcollection.co.uk
            edebyahu.com
            az-pneu.sk
            beaufortccc.edu
            prob.test.dn.ua
            shopdullestowncenter.com
            burgerking.kz
            teacheng.info
            ohioslargestplayground.com
            dailynews.kz
            internetreklampaketi.com
            neterra.net
            radcom.com
            parismarais.com
            iradeo.com
            misteram.com.ua
            visittelluride.com
            statuschecker.fgdc.gov
            echn.org
            hustlerturf.com
            cpareviewforfree.com
            naturallygoodfood.co.uk
            wgxa.tv
            barbecoa.com
            shawmut.com
            bandari.net
            dbs.org
            cpisecurity.com
            fr.novus.com.ua
            kff.kz
            speechocean.com
            uttaradimath.org
            savaria.com
            dom2.life
            pramo.ru
            broadwayatthebeach.com
            7up.com
            omoimot.ru
            ndiver.com
            darienlibrary.org
            adnddownloads.com
            poems-and-quotes.com
            sonance.com
            pinchapenny.com
            campjellystone.com
            radioislamy.com
            mpay69.biz
            surreynanosystems.com
            leisureleagues.net
            khipu.net
            arte-international.com
            susqu.kappadelta.org
            lawinrussia.ru
            highwaywestvacations.com
            rmiguides.com
            firedepartment.net
            northwestern.kappadelta.org
            atlanta.ua
            sonata.biz.ua
            vancouverconventioncentre.com
            wilsonaudio.com
            teplo.gov.ua
            elorift.com
            jazzmap.ru
            duplicolor.com
            mctop.pro
            guitarwar.com
            internet-prodaja-guma.com
            superlift.com
            www-host.pz.gov.ua
            pz.gov.ua
            gsmcamp.info
            region-operator.ru
            ei-ie.org
            sar.org
            siouxlandnews.com
            miraclemethod.com
            polygon.staya.vc
            snapple.com
            usocial.pro
            lenel.com
            jurispro.com
            toyotaforklift.com
            kronoshop.com
            ojolie.com
            expert.atamura.kz
            sikayet.com
            islamicbanker.com
            anglofeel.ru
            iutoic-dhaka.edu
            thaicom.net
            kimatv.com
            tika.gov.tr
            mnsi.net
            4ad.com
            glazok.km.ua
            sagales.com
            zorlupsm.com
            erg.kz
            momentfactory.com
            thelife.com
            istanbulhalksagligi.gov.tr
            pharmspravka.ru
            vest-news.ru
            newvoicemedia.com
            selectitaly.com
            vadecom.net
            karada39.com
            foxfishing.ru
            drpeppersnapplegroup.com
            skisolitude.com
            109.kurjer.info
            zrk.in.ua
            4mama.ua
            auto-online.ru
            studentrecipes.com
            amda.edu
            cashalot.su
            stagejobspro.com
            globo.tech
            ip-home.net
            dj.ru
            nio.kz
            harvardartmuseums.org
            handpickedhotels.co.uk
            snohetta.com
            mushroomtravel.com
            credit-agricole.ua
            vicon.com
            kredit24.kz
            gastrogate.com
            local15tv.com
            khqa.com
            fightnights.com
            kassir.kz
            2000adonline.com
            fineandcountry.com
            digitalgain.net
            ostrov-chistoty.by
            restaurants.com
            millennialmedia.com
            abc7amarillo.com
            web2generators.com
            trendsideas.com
            bridgerbowl.com
            hozvo.ru
            jaksta.com
            palata.kz
            kurskmed.com
            kfdm.com
            kyzylorda.palata.kz
            karagandy.palata.kz
            almaty.palata.kz
            uralsk.palata.kz
            taldykorgan.palata.kz
            taraz.palata.kz
            aktobe.palata.kz
            oskemen.palata.kz
            akmola.palata.kz
            shymkent.palata.kz
            aktau.palata.kz
            kostanay.palata.kz
            atyrau.palata.kz
            astana.palata.kz
            universalstudios.com
            petropavl.palata.kz
            pavlodar.palata.kz
            referat-ok.com.ua
            kudumbashree.org
            primoprint.com
            dremed.com
            beauty.ua
            zwp-online.info
            jamesbeard.org
            kftv.com
            postcardmania.com
            northwood.edu
            foxsanantonio.com
            haskovo.net
            whatpub.com
            bills.com
            bet-portal.net
            music-man.com
            promplace.ru
            innovation.bsmu.edu.ua
            infobanc.com
            aja.com
            foxbaltimore.com
            toniandguy.com
            kfoxtv.com
            itickets.com
            newschannel9.com
            cms.bizhat.com
            serenityservers.net
            beyondmeat.com
            domsnov.ru
            batnorton.com
            kaluga-poisk.ru
            rinka.lt
            larepublica.net
            my.prodengi.kz
            aksaray.edu.tr
            katv.com
            bspu.ru
            easydns.com
            iza.org
            wsbt.com
            sirus.su
            arhionis.ru
            cbs6albany.com
            adbit.biz
            riddles.com
            alean.ru
            ocrconvert.com
            uwb.edu.pl
            bankastana.kz
            thefabricator.com
            vectorworks.net
            news4sanantonio.com
            local12.com
            grandtheftauto.net
            theappguruz.com
            professor.bsmu.by
            villagecines.com
            cinefil.com
            touregypt.net
            wgme.com
            abc3340.com
            regionoperator.ru
            resolume.com
            igetweb.com
            monsterenergy.com
            bokra.net
            practicalmoneyskills.com
            cabinet.vlast.kz
            president.gov.ua
            wlos.com
            justpark.com
            socialll.net
            sanalkurs.net
            weber.com
            studydrive.net
            leftlanenews.com
            gifu.mypl.net
            collegescholarships.org
            prisnilos.su
            sberbank.kz
            planethoster.net
            kutv.com
            onlinesim.ru
            mcprohosting.com
            cname.pitchero.com
            foxmovies.com
            insidethegames.biz
            en.hromadske.ua
            suse.com
            dunya.com
            likar.info
            ece.ntua.gr
            veterans.arkansas.gov
            firstcitizens.com
            unblockvideos.com
            magazine.mubasher.info
            gamesdonequick.com
            bitcomet.com
            ratel.kz
            nplus1.ru
            8march.technodom.kz
            barchart.com
            elderscrollsonline.com
            anadolu.edu.tr
            zhanakorgan.gov.kz
            sailau.orda.gov.kz
            weyt.p5w.net
            cart.onliner.by
            r.onliner.by
            ptzw.ru
            fritzandandre.com
            metamesh.net
            stream.remax.co.za
            williamastrom.se
            museumquarter.com
            expertbids.com
            gemarbv.nl
            eyrini.ru
            palsgraafdakbedekkingen.nl
            autobahn.co
            ptznew.ru

            • +2

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

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

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

                  • 0
                    По наличию куки laravel для 4.х ветки и laravel_session для 5.х. Как правило, параметр config(session.cookie) редко кто переопределяет
              • 0
                что удивительно, очень много сайтов из KAZнета
                не ожиданно
              • –2
                Как по мне, то одним из определяющих свойств современного энтерпрайз-реди фреймворка, является возможность сменить его частично (прежде всего уровень персистетности) или полностью на другие реализации, не затрагивая особо код бизнес-логики. Когда последний раз (давно) смотрел Ларавел впечатление сложилось, что всё очень сильно и жёстко связано.
                • 0

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

                  • 0

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

                    • 0

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

                  • +1

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


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

                    • 0

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

                      • 0

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

                        • +1

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

                          • 0

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

                            • +1

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

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

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


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


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

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


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

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


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


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

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


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

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


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

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


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

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


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

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

                    • 0

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

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

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

                        • +1

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

                          • +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 строк добавить.


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

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

                            • 0

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


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

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


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

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

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

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


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


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


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


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


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

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

                                • 0

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

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

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

                                • +1

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

                            • 0

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

                              • 0

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

                              • 0

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

                                • 0

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

                          • 0

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

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

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

                              • 0

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

                              • +1
                                Альфа-форекс из каталога Yii сделан на OctoberCMS, которая базируется на Laravel. Вывод этот сделан на основе cookie, а так же по наличию пол года назад вот такой ошибки, характерной для плагина ProBlog.
                                Так что актуальность каталога под большим вопросом.
                                • +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
                                  • 0

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

                                  • 0

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

                                    • 0

                                      Поправил.

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

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

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

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


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

                                  • 0

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

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.