Како смо изградили Campayn на CakePHP фрејмворку

Хтео бих да поделим са вама наше искуство у раду са CakePHP (КејкПХП) фрејмворком за рад у PHP (ПХП) језику. Под „нас“ мислим на Дев екипу иза Campayn а под „искуство“ мислим на добро и лоше које иде уз било који избор алата и парадигми.

Зашто CakePHP?

Знате и сами како како се бира најбољи алат за рад у софтверским кућама: узима се најбољи ради се са оним са чиме тренутна екипа зна да ради. Програмски језик се бира на основу скилсета тренутне екипе а фрејмворк на основу преференси програмера који је први дошао у фирму, засукао рукаве и ударио камен темељац за пројекат.

У идеалном свету, језик би се бирао на основу истраживања и прилагођености проблему, мада у том истом свету и кафа тече из славина а проџект менаџери знају програмирати….
….сваки следећи програмер који дође у фирму само настави тамо где је претходни стао, а ако има среће можда неће бити блокиран на друштвеним мрежама од стране првобитног програмера.

Пројекат је већ имао основу у CakePHP-у – додуше, у другом производу и имало је смисла наставити на томе. Пре 6 година није постојао јасан победник у популарности међу PHP девелоперима као што су то сада Ларавел и Symfony. Ларавел је тек зачет 2011-е, док је CakePHP постојао још од 2005-е (сећам се јер сам те године још плаћао бежични интернет 120 дин за 100 мега) и важио је за веома сигуран и стабилан избор, што још увек и јесте. Са друге стране, CodeIgniter је био у пуном замаху, али сви знамо како се то завршило – привремено напуштен и паузиран.

А шта је уопште Campayn?

У питању је SaaS или ти нашим језиком речено „софтвер за изнајмити“ – производ који служи за спамовање слање имејлова на дате контакт листе и користан је за слање newsletter-a, промоција и осталог промотивног материјала на више адреса, наравно под условом да примаоци уопште и желе те ваше поруке.

Укључује user-friendly едитор за брендирање ваших порука, убацивања слика, линкова и осталог садржаја којег и тетка са Фејса зна користити и омогућује вам лако праћење резултата (тј. видите ко игнорише ваше имејлове), сегментирање контаката на основу разних комбинација (можете послати баби из Шипова тај најновији модел Горење шпорета, кад би наш алат био прилагођен за слање порука преко поштара Жике), намештавање signup форми као например оних што искачу након што дођете до пола неког текста „које сви јако волимо“ и аутореспондера тј аутоматских поруке типа „Хвала и молим вас немојте нас бацити у спам сандуче“ и многе друге.

Нема смисла да набрајам 6 година рада, можете погледати списак свих или бар већи део функција на нашем сајту, а можете нас и цимнути на чету уживо тамо (молим вас немојте).

Што се тиче сирове снаге и бројки, у питању је систем који процесира репортинг податке брзином од 1000+ позива по минути, док истовремено и даље трпи свакодневно коришћење сајта и алата. Трпи MySQL базу од преко 100GB са преко 200 табела на коду чије редове се не усуђујем да пребројим (а реално, то је као да бројите напредак изградње авионе у килама). На истој основи смо направили и spinoff производ за нишу у Канади, користећи исти код и исту базу и паралелно се развијају оба SaaS производа.

Предности

  • Приступачан новим људима

Много Индијаца програмера је протутњало кроз пројекат и свако је био у могућности да буде користан већ за дан-два а по могућности и дуже од дан-два. Нисмо никад имали проблем са новим људима који га први пут користе. Сви тренутни програмери у екипи су се први пут сусрели са CakePHP-ом кад су дошли на овај пројекат укључујући и мене. То укључује јуниоре чији је врхунац тада био Vannila PHP + jQuery, програмера који је зарадио лебац на eCommerce системима и једног Ларавел артисана (да да – пуштамо и брадате хипстере у екипу).

Чак и да им је цела MVC парадигма (Model View Controller) сасвим нова, веома се лако прилагодити. Малтене ни ООП (објектно-орјентисано програмирање) не морају знати: имали смо људе који су радили првенствено на фронтенду – и са тим нису морали дубоко познавати ООП страну PHP-а. Све што је потребно је пар дана маx док се не по’ватају основе, а финесе долазе са временом.

Такође, један од олакшавајућег фактора јесте одлична документација. Не могу ово довољно да нагласим – увек је ажурна и пуна корисних примера. Оснивачи очигледно воле кување (шта ли их је одало?), па тако се и документација назива куваром (CookBook) а нови алат за намештања пројекта пећница (Oven). За љубитеље сувих спецификација имају и API документацију. Цео код им је одлично документован и већ дуже времена ми ни не треба онлајн документација. Не шкоди и то што постоји већ 10+ година, па имате свакојака решења и блог постове на интернету и StackOverflow.

Ако немате новаца а имате времена, одрадите пробни пројекат из документације. А ако је обрнуто, пријавите се на онлине тренинг од стране CakeDC фондације да би се оспособили за квалитетан рад за два дана.

  • Флексибилан за рад

Флексибилност је у овом случају добра и лоша али пошто смо ми у старту PHP програмери – жртвовање мало строгости ради бржег, лакшег и баговитијег продуктивнијег рада нам је у крви. View слој су *.ctp фајлови, а они су исто што и .php фајлови. Дакле, не губите на флексибилности као рецимо са Смартy или Блејду што у овом помаже у писању мање кода и у пуцању себи у ногу, по потреби наравно.

Сви слојеви ове торте су јасно дефинисани, иако вам фрејмворк говори где иде пишкота а где шлаг, вас ништа не спречава да направите украсне руже од бибера и филинг од мајонеза – али немојте, молим вас. За оне много ретке ситуације када је такво нешто оправдано, ово је плус, а и супер је за кад вам треба нешто „брзо и прљаво“ ради демонстрације концепта. Алати за кување (Cake bake конзола) су сјајан начин да брзо генеришете нове моделе, контролере и тестове.

  • Одлична екипа иза CakePHP-a

Кувари иза CakePHP-а су веома приступачни, можете их увек цимнути на друштвеним мрежама или на Slack-у и искрено ће се потрудити да вас не отерају у три лепе за ваша глупа питања. Спремни су да помогну и јако су ажурни на Github профилу пројекта, где редовно проверавају новопристигле примедбе и багове. Ако тражите први пројекат којем бисте хтели допринети у свету отвореног кода, предлажем њихов GitHub али ако сте очајни програмери, немојте рећи да сам вас ја послао.

Мане софтвера

Спомињали смо флексибилност као врлину, али је то уједно и велика мана ако немате строг процес провере кода (такозвани Code Review). Док смо увели Code Review у редовну праксу свакакви бисери су се увукли у нашу такозвану торту, што је значило да смо касније ми заједно са корисницима ломили зубе на споменутим бисерима.

Такође релативно опасна ствар за почетнике, CakePHP ради све чим га извадите из кутије, па притом уз торту добијате и тацну, свеће и кухињски пулт. Тек касније схватате вашу грешку и онда почиње гашење разних ствари од којих нисте имали користи. Али када то одрадите имаћете супер брз програм опет (ако је то икад и могао да буде).

Мора се споменути и чињеница да 2.x грана CakePHP-a користи Модел слој који ради све користећи низове (arrays). Опет, ми смо PHP програмери па то има смисла, али на великим пројектима то ће створити неке главобоље. Препоручујем да створите навику да пишете тестове који су притом лепо интегрисани у фрејмворк. Све нове пројекте започињите са најновијом верзијом CakePHP-а (тренутно 3.4.x), а ми који смо осуђени на рад са старијом верзијом ћемо вас већ некако стићи.

Закључак

Мислим да је избор фрејмворка био одличан са обзиром на тадашње опције, а са верзијом 3 (коју помно пратим) је цела прича модернизована што даје целом пројекту на озбиљности. Чињеница да и дан данас развијају 2.x верзију је тестамент томе колико је ово сигуран избор. Не знам шта би било да смо после 3 године рада извисили и морали потрошити 6 месеци само на прелазак на други фрејмворк. Одлична документација, добра заједница и стабилан фрејмворк је све што велике идеје могу пожелети. Зато, напред у кување!