La un moment dat incepusem sa postez prin Ce proiecte au membrii DevForum, dar am esuat lamentabil dupa ce mi-am dat seama ca n-am tinut cont de nici o regula de dezvoltare, si am ajuns sa ma impotmolesc in propriul cod.
Am un magazin online facut unui prieten de ceva timp si ma tot roaga sa-i fac updateuri mici, dar lipsa de motivatie e enorma, chiar si cu plata pe munca prestata. M-am gandit ca, crearea unui SaaS ar fi o solutie mai buna, i-am prezentat-o, ii surade ideea si e de acord cu plata unui abonament modic lunar pentru folosirea unei platforme de genul. Ba mai mult, mi-a spus ca mai are o prietena ce ar vrea sa-i creez un site asemanator, dar motivatia tinde spre zero. Stiu ca exista deja un Saas in Romania (gomag) destul de avansat, nu ma gandesc la concurenta, ci strict la faptul ca am 4 5 cunostinte care ar putea folosi un astfel de serviciu daca l-as duce la bun sfarsit (s-ar putea sa esuez la fel si cu aceasta idee, dar chiar si asa, pe parcursul evolutiei proiectului invat destul de multe lucruri, astfel ca nu e chiar atat de inutil).
Am pornit cu gandul sa creez un SaaS bazat pe structura deja creata pentru magazinul prietenului, si sa incep cu un minim de templateuri (doua la numar), pentru ca nu as vrea ca toti clientii sa aibe design. Problema ce a aparut e la structurarea aplicatiei. Fiind scrisa in Angular, lazy loadingul este posibil pe module, dar din cauza multi-templateurilor, s-ar putea sa repet din nou figura cu spaghetele. Am pus pe foaie, si in prima faza mi-au iesit 2 structuri:
A)
app/template1/home
-------------------/products
-------------------/profile
-------------------/cart
app/template2/home
-------------------/products
-------------------/profile
-------------------/cart
B)
app/home/template1
-------------/template2
app/products/template1
-----------------/template2
De ex, modulul products are 2 pagini, una pentru listarea produselor, si alta pentru detaliile unui produs. Pentru fiecare pagina, este nevoie de 2 versiuni (cate una pentru fiecare template).
C) ?
M-am mai gandit ca pot grupa templateurile intr-un modul separat, cu structura pentru fiecare pagina:
app/templates/template1/ pagini (care de fapt sunt componente: home, products-list, products-detail, cart, checkout, profile, etc)
app/templates/template2/ (componente duplicate de la template1, dar cu sectiuni si stiluri proprii).
Problema este ca la primul request (la accesarea siteului), va fi adus templateul respectiv (obiect detaill) aplicatiei web plus toate detaliile acestuia (in mare parte, stiluri personalizate care vor suprascrie stilurile default). Dupa asta, aplicatia va face loading componentei template care se matchuieste cu rezultatul http-requestului.
Ce ma intereseaza este ca la oricare dintre cele 3 variante, as vrea sa renunt la datele templateului nefolosit, iar bundle-ul aplicatiei sa fie minim. De ex, daca am 100 templateuri, adminul siteului va alege doar unul, dar cand siteul va fi accesat, vreau sa-l incarce doar pe cel folosit, nu si celelalte 99 care nu vor fi niciodata utilizate.
Orice varianta as folosi, mi se pare ca pentru fiecare template, duplic codul, iar size-ul aplicatiei pateste acelasi lucru, creste inutil. Pentru ca siteul clientului X va avea de suferit pentru ca mai am inca 99 templateuri create pentru alti clienti.
Ma gandesc ca e problema de structurare aplicatie + lazy loading module sau chiar componente si nu vad o solutie pentru a nu creste inutil size-ul aplicatiei. Nu stiu daca este posibila ducerea templateurilor in backend/db si incarcarea intr-o componenta dinamica a sectiunilor (componente card, grid, header, menu …). asta suna complicat si probabil eronat
Merci