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

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