Yii2 Basic czy Advanced: od którego szablonu zacząć

Drzewa katalogów szablonów aplikacji Yii2 basic i advanced

Każdy projekt w Yii2 zaczyna się od tego samego rozwidlenia: yii2-app-basic czy yii2-app-advanced. Wybór wygląda na strukturalny, więc zespoły traktują go poważnie i na wszelki wypadek biorą Advanced. Ten odruch zwykle jest błędny, a jego ceną jest drzewo katalogów, które trzeba tłumaczyć każdemu nowemu programiście.

Czym się różnią

Oba szablony dostarczają ten sam framework. Różnica polega na tym, ile aplikacji zawiera projekt i gdzie leży kod współdzielony.

yii2-app-basic                yii2-app-advanced
├── config/                   ├── common/      wspólne modele, konfiguracja
├── controllers/              ├── console/     aplikacja CLI
├── models/                   ├── backend/     panel administracyjny
├── views/                    ├── frontend/    aplikacja publiczna
└── web/                      └── environments/

Basic to jedna aplikacja. Advanced to trzy aplikacje plus katalog common i mechanizm environments, który podczas init kopiuje pliki konfiguracyjne na właściwe miejsce.

Advanced ma też gotową rejestrację i reset hasła oraz osobne ciasteczka sesji dla każdej aplikacji, więc administrator zalogowany w backend nie jest zalogowany we frontend.

Reguła wyboru

Zaczynaj od Basic, chyba że już pierwszego dnia zachodzi jeden z warunków:

  • Panel administracyjny i strona publiczna potrzebują osobnych mechanizmów uwierzytelniania, a nie tylko różnych ról.
  • Panel administracyjny trafi na inny host lub inną domenę niż strona publiczna.
  • Dwa zespoły utrzymują dwie aplikacje i potrzebują niezależnych wdrożeń.

Jeśli żaden z nich nie zachodzi, właściwym wyborem jest Basic. Kontrola dostępu oparta na rolach wewnątrz jednej aplikacji pokrywa zdecydowaną większość wymagań typu „potrzebujemy panelu admina”, i to bez trzech katalogów config.

Koszt złego wyboru

Obie pomyłki da się odwrócić, ale nie tym samym kosztem.

Z Basic na Advanced to praca mechaniczna. Tworzysz układ katalogów, przenosisz modele do common/models, dzielisz konfigurację i aktualizujesz przestrzenie nazw. W średnim projekcie dzień pracy, a migrację da się testować na każdym kroku.

Z Advanced na Basic zdarza się rzadziej i sprowadza się głównie do usuwania, ale mechanizm environments/ zdąży już wsiąknąć w skrypty wdrożeniowe, więc doliczy się do tego zmiana w CI.

Żadna z tych operacji nie jest przepisaniem projektu. To uczciwe ograniczenie każdej porady na ten temat: decyzja waży mniej, niż sugeruje internet, a wybór Basic i pomyłka kosztuje mniej niż wybór Advanced i trafienie.

Czego Advanced nie daje

Advanced nie jest funkcją skalowalności. Nie przyspiesza aplikacji, niczego nie dzieli na shardy i nie wymusza czystszej architektury. Trzy aplikacje dzielące jeden katalog common potrafią narastać sprzężeniem dokładnie tak szybko jak jedna aplikacja, a katalog współdzielony jest zwykle miejscem, w którym to sprzężenie narasta.

Jeśli celem jest rozdzielenie odpowiedzialności, moduły wewnątrz aplikacji Basic osiągają to mniejszym kosztem:

// config/web.php
'modules' => [
    'admin' => [
        'class' => 'app\modules\admin\Module',
    ],
],

Dostajesz routing /admin/*, odizolowaną przestrzeń nazw i własne kontrolery, zachowując jeden artefakt wdrożeniowy.

Yii2 w dłuższej perspektywie

Budujemy na Yii2 systemy CRM, platformy Customer Success, sklepy internetowe i integracje B2B od ponad dziesięciu lat. Wzorzec, który powtarza się w tych projektach, jest ten sam: zespoły, które najdłużej zostały przy Basic, najmniej czasu poświęciły na tłumaczenie własnej struktury katalogów nowym programistom.

Yii2 pozostaje rozsądnym wyborem dla tej klasy aplikacji. Jest dojrzały, domyślne ustawienia bezpieczeństwa są sensowne, a ścieżka aktualizacji od lat jest stabilna. Jego słabość jest tą samą cechą co siła: konwencje są mocne, więc walka z nimi kosztuje.

Jeśli podejmujesz tę decyzję w trwającym projekcie albo szukasz drugiej opinii na temat migracji, napisz: info@pceuropa.net