Gestionare modificari intr-o aplicatie multitenant

Salutare,

Am construit o aplicatie (gestioneaza donatiile pentru organizatii) care acum vrem sa o replicam si pentru niste clienti. In acest moment este vorba de primul client pentru care o vom instala (in afara de varianta initiala)

Acum asa cum este de asteptat pentru aplicatia pentru client trebuie sa aibe anumite lucruri diferite fata de aplicatia initiala. Unele sunt chestii simple, gen modificare culori, logo-uri etc care sunt facute sa fie gestionate din zona de admin.

Acum intrebarea este cum ati gestiona modificarile majore ale aplicatiei. In acest moment una din pricipalele chestii sunt legate de modificari ale layout-ului din front (numar de coloane, elemente din pagina etc)

Eu am in minte 3 variante:

a) Crearea de optiuni pentru a gestiona din admin elementele din pagina
Avantaj: se pastreaza aceeasi baza de cod
Dezavantaj: se adauga complexitate si incetineste aplicatia pe termen lung

b) Crearea de branch-uri diferite pentru fiecare client (aplicatia este defapt replicata la nivel de tara, deci vor fi poate maxim 10-15 clienti)
Avantaj: Flexibilitate si usurinta la realizarea de install-uri cu modificari la fiecare client
Dezavantaj: sunt create x variante ale aplicatiei si va fi dificil de adaugat functionalitati noi, necesitand adaptare si testare pentru fiecare branch

c) Crearea unui sistem de templates si plugins
Avantaj: Pastrarea unui core usor de upgradat, flexibilitatea in modificarile pentru un install nou
Dezavantaj: adauga o complexitate si necesita ceva munca la inceput pentru a gandi un sistem cat mai flexibil pentru template-uri si pluginuri.

Eu as inclina putin spre varianta C, dar grija mea este daca merita efortul. Nu e ca si cum vor fi un numar mare de branch-uri care trebuie gestionate. In plus codand fiecare varianta separata nu ai incarcarea si complexitate suplimentara de la variantele a si c.

Pe mine varianta B ma inspaimanta :smile:

Daca ai doar modificari de template as merge tot pe varianta C. E cel mai simplu si asa core-ul aplicatiei ramane neatins, in timp ce template-ul e diferit pe client. Iar legatura intre client si template o faci din administrare (sau prin parametrii aplicatiei).

Daca folosesti Twig de exemplu poti avea ceva template-uri de baza cu blocuri extensibile, ceea ce iti va permite o extindere foarte usoara.

Ce framework folosesti? (asta daca folosesti)

Am trecut prin asta de curând cu o aplicație desktop, și oricât de mult aș fi vrut să am la îndemână varianta C, timpul a fost puțin și am folosit varianta B.

Dar revenind la întrebarea ta eu aș pune problema mai degrabă așa:

  1. Dacă diferențele între clienți țin doar de UI, atunci varianta cu template-uri și editor în admin. Cred că varianta A dar cu template-uri.
  2. Dacă diferențele între clienți nu sunt doar de UI, și trebuie să modifici funcționalitatea aplicației atunci varianta C care cred că este cea mai costisitoare. Moment în care chiar și varianta B o să pară bună sau chiar o combinație între A(cu template-uri) și B. în fiecare branch al clientului vei avea un poriect nou care v-a extinde core-ul logic al aplicației. Asta dacă designul inițial permite.
  • ideal C.
  • cel mai probabil B.

Daca ai timp si resurse normal ca ar fi indicata varinata C. Dar n-am intalnit pana acu pe nimeni sa zica “avem timp si resurse berechet”. Daca ai un pic de grija si lucrezi cat de cat modular probabil poti sa faci o strutocamila intre B si C, recte sa folosesti sectiuni de pe diverse branch-uri in alcatuirea unui branch nou.

Asta in conditiile in care e un plan cat de cat stabilit. Daca se face planul on the go… dumnezeu cu mila, vezi la fata locului si la momentul dat.

Grija mea este ca la un moment vor fi si modificari de functionalitate. Unul vor ca donatorii sa se logheze pentru a dona, altii nu sa zicem. Lucru care nu va fi asa usor de facut dintr-un sistem de tema. Ar trebui creat un intreg sistem de plugin-uri cu hook-uri in core.

Aici e problema mea. Acum extindem intr-o singura tara noua, care are cateva cereri relativ mici ce pot fi facute usor dintr-un sistem de tema sau chiar cateva optiuni prin admin.
Grija este ca vor veni pe rand tot felul de cereri si la un moment dat o sa iasa cum ai spus o struto-camila intre toate variantele. Dar probabil asta e si raspunsul :))

Fix asta se va înâmpla. Am trecut prin procesul ăsta de decizie (ceva mai simplist, trebuie să recunosc :D) și concluzia mea a fost că dacă nu ai un SAAS vândut as-is unor clienți probabil vei ajunge să faci branch-uri pentru că toți au idei crețe. :smile:

1 Like

Am trecut printr-un proiect similar, personal aleg A) adaugi aceleasi optiuni pentru toti clientii care se pot dezactiva din admin. Mai mult toate proiectele ruleaza din acelasi DB si un cluster web.
Daca sunt clienti cu niste cereri care nu sunt conforme cu ideea voastra de produs puteti sa ziceti NU pastrand astfel unitatea aplicatiei. Restul de variante adauga complexitate ridicata la intretinere si dezvoltare ulterioara.