Component develop tricky problem (JS)

@bozoou

Wp je primjer kako se ne bi smjelo raditi.
Sto vrijedi kad sve izgleda lijepo, jednostavno, hrpa pluginova, kad je ispod haube goli k.

Bas sam gledao woocommerce, super izgleda, opet ispod haube banana i previse code-a s obzirom sto sve nudi u core instalaciji.

Očito nije slučajno, jer to je zoran primjer korjena problema.

Mislio sam da sam dao više nego dovoljno primjera…ali evo jedan malo realniji.
Zamisli da ideš praviti komponentu koja će omogućiti useru totalni CRUD nad nekim modelom u bazi. CRUD je jel: create, read, update, delete.

Za izvesti CRUD trebamo svašta…od ajaxa, modala…do svih mogućih inputa kakvi se mogu pojaviti: text, date, number, checkbox…
Da bi to sve na nešto ličilo, trebamo te inpute posložiti u nekakve forme…koje se možda pojavljuju i na onim steper formama koje imaju step1 -> step2 -> step3.
Nadalje, ako je pošten CRUD, trebao bi raditi i na mobitelu…

I sad?
Ako pogledaš malo ta komponenta CRUD-manager nema doticaja sa niti jednim vlastitim HTML elementom, mada mora koristiti sve gore navedene.
Tako reći, ti bi za implementaciju tog CRUD managera trebao samo toj komponenti reći koji model u bazi managira…te bi joj kroz konfiguraciju objasnio koje permissione korisnik ima (a vrlo vjerovatno nebi ni to objašnjavao, jer bi već nastala komponenta koja bi mogla obavljati taj zadatak)…i ona bi dalje sve mogla odraditi koristeći tvoje INPUT komponente koje ti već imaš implementirane na stranici. Naravno, morao bi i komponenti dati permissione prema drugim komponentama koje će ona moći koristiti…i koje će ona zahtjevati od developera.

Stoga, tvoja priča sa tom CRUD komponentom nakon što si je inicijalizirao bi započela tako da bi ju kreirao unutar nekog elementa na već standaran način: CRUD.Create(). (Što smo negdje gore rekli da svaka komponenta bi morala imati root apstrakciju, gdje bi se nalazila i .Create metoda)

Ako bi se napravila i apstrakcija CRUD komponente…neka još složenija komponenta bi mogla koristtii taj CRUD-manager u svoje potrebe samo tako (onako od šale)… a ti kao developer bi počeo usložavati jedne puno veće funkcionalnosti i tako bi kreirao puno veće i složenije stvari. Izašao bi konačno iz toga layera da konstanto rujemo po dnu i mulju …i slažemo neke bazične stvari. Koje tu trebaju biti…onako doslovno što “pomislimo” na njih da nam se stvore…
A s vremenom da nam se stvaraju i puno kompleksnije stvari na jednako jednostavan način.

Ono što je također prednost ovog pristupa je modularnost… znači, danas sutra shvatiš da neki drugi CRUD-manager je bolje posložio user-experince u svom zadatku. Ti pri tome trebaš samo zamjeniti svoju postojeću CRUD komponentu sa tom drugom…i ništa se nebi smjelo raspasti!

Danas sutra uočiš neki inovativniji dropdown, koji se bolje recimo prikazuje na mobitelu…zamjeniš samo svoju dropdown komponentu sa tom novijom…i sve ostale komponente od CRUD-managera do svih drugih koje su koristile dropdown…automatski su prešaltane na taj novi dropdown. With no pain.

To bi u jednom globalnom smislu konstantno tjeralo da se komponente nadmeću…da budu bolja jedna od druge, a zajednica bi u većinskoj mjeri uvijek koristila onu komponentu koja najbolje rješava neki zadatak.

Recimo, cijeli svijet bi koristio jedan CRUD-manager, dok se nebi pojavio neki bolji. Tada bi se brzo svi prešaltali na taj bolji…itd. …itd.
A sve komponente bi bile naganjane na isti način ka naprijed.
Konačno, developeri bi dobili kvalitetne alate…a proizvođači komponenti bi neki svoje naplaćivali…neki ne…baš identično stanju pluginova koje možemo naći u WP svijetu.

E vidiš…ja nigdje nisam rekao da i ispod haube treba biti izvedeno na isti način.
WP je stoga lijep primjer kuda stvar može otići čak i ukoliko je ispod haube kaos.

Sada zamisli kuda stvar ide ukoliko je ispod haube ok posloženo. Svemir je granica.

Na ovo nitko nece pristati jer je u pitanju lova, milijarde koje se okrecu.

Sad zamisli da imas crud, menu componentu, trazilicu i da su komponente napravljene po dogovorenom standardu, doslo bi do toga da bi svaki drugi developer napravio komponentu koju bi prodavao po $ 0.01 i imao bi na ponudi par milijuna menu i sl. , i tako za svaku komponentu.

Ogromna konkurencija, a nitko ne bi zaradio.

Pogledaj komponente gore, stavio link, pogledaj cijenu i broj korisnika koliko ih imaju, neka ih pola plati, a ostali koriste open source, izracunaj koliko je to minimalno love.

Milijuni godisnje.

Ovo je OK primjedba. Padne mi često na pamet…ipak osjećam da je nešto drugačije, inače nebi bio motiviran.

Mislim da je razlika u tome što ovaj pristup povezuje sve paralelne grane…a ne radi novu. Isprika, ako je neka od tih tehnologija isto to…da radi na povezivanju, a da ja s time nisam upoznat.

Ja primjećujem da su sve te tehnologije nastale unutar neke korporacije…tipa react je FB proizvod, angular googloevo…itd.

Stoga, očito je da niti njima nije bilo dobro trenutno stanje i da su tražili načine rješavanja problema. …vjerovatno im nije bio prioritet ta rješenja nametati drugima, nego su tek našli način da se sinkroniziraju u radu unutar svoje korporacije…

Isto tako i ja…meni je već ok što ću sebi olakšati rad…i zato ću ići tim putem.
No činjenica je da bi mi se dodatno olakšao rad kada bi i drugi upali u moj ekosistem, jer bi dobivao gro toga za badava.

No pozitivan fact za mene je da mogu doslovice na svojim leđima iznesti breme normJS-a …a to je da krenem od tuda da kreiram apstrakcije koje spominjem. Zatim ću uzimati tuđe komponente i warpati ih samo u klase koje će poštivati moje apstraktne klase…a koje će ispod haube pozivati nativne metode klasa koje ću uzimati.
Tako ću dobiti modularnost unutar svog sistema sa komponentama koje inicijalno nisu pravljene po normJS standardu.

Ako to dovedem na neku razinu, netko drugi će moći lako modularno koristiti te komponente koje sam ja warpao u normJS. I tu lagano onda možda krene priča u nekom smjeru šire prihvaćenosti. No to su snovi…ne očekujem da će se na toj razini realizirati od moje početne točke…no definitivno znam kako ću krenuti zbog vlastite potrebe.

…isto tako, definitivno sam uvjeren da je ovo ispravan put i da će se samnom ili bez mene prije ili kasnije iskristalizirati.
Štoviše, ovakav pristup se već iskristalizirao u mnogim segmentima… i ne tražim ja neku potvrdu, jer je već imam. Samo mi je čudno kako drugi ne vide što je potrebno zajednici… ali velim, vidjet će prije ili kasnije … neizbježno je.

Obični DIV i SPAN su primjeri da je potrebna neka standarizacija attributa nekog elementa koji spada u neki type. U ovom slučaju HTML_element je taj type.

Typescript vam je primjer koliko su tipovi varijabli bitni…i to je microsoft jako dobro prepoznao, zato i gura tu politiku sa nužnim definiranjem tipova varijabli. (Nisam siguran da to dobro govorim za typescript, ali generalno to vrijedi za typed jezike, što je recimo C# koji mi je to otkrio)

Sve u prirodi spada pod neki type…čak i ova dva sljedeća stringa
string 1: "[email protected]"
string 2: “098/555-215”
…oboje spadaju pod string, ali se razlikuju po tome što jedan spada pod string-email, dok drugi spada pod string-phone number. I to ih već čini poprilično različitim stringovima nad kojima bi se mogle izvući različite metode.
…dok sve metode koje su zajedničke nad tipom string, će vrijediti za ta oba stringa.

Isto se dešava sa komponentama…mora se shvatiti koji tipovi komponenata postoje i koje metode im pripadaju. To je definitivno konačan skup u svakom momentu t. bez obzira što se već u momentu t2 skup komponetni/metoda proširio…tj. evoluirao.

Isto tako, na broj komponenti/metoda ne utječu razlike u nazivima istih…niti u načinima implementacije istih. To je stoga ono što je potrebno uskladiti radi bolje sienergije.

Sorry da prostiš, ali ovo ti niš nema smisla. Ovo su ti na dječjoj razini zaključci.
Tržišnu stvar je odavno rješio zakon ponude-potražnje…koji je u svojoj naravi poptpun prirodan i ne nametnut od nikoga, sem samog svemira.

Ako imaš potražnju imaš i neku vrijednost. Ako imaš jaku konkurenciju…pada ti potražnja, time i vrijednost.
Svatko tu unutar svoje kože pronalazi vlastite razloge hoće li nešto dati za džabe…ili će pokušati naplatiti ili koji su već njegovi motivi…i taktike.

Ovo je također druga tema, ekonomske naravi… a kako si ju startao…zaista je nebi nastavio.

@bozoou

Sve ok.

Samo si naivan, ako mislis da bi sve moglo biti idealno u svijetu.

Imas dobro razmisljanje i zelje su jedno,a stvarnost drugo.

Da je to nekome u interesu, onda bi se to i napravilo,kao sto konzorcij za w3 broji stotine clanova, a clanovi su redom sve velike firme koje imaju interesa u tome. Sve se vrti oko love i dok god je tako, ako u necemu nema koristi nema promjena. Vrlo jednostavno.

FYI komponente su nativno podrzane u nekim Browserima, tj. radi se na tome

Baci pogled i na Stencil.

1 Like

Problem je što su promjene konstantno tu. Nije da ih nema :slight_smile:
Sama pojavka typescript jezika kao layer nad javascriptom pokazuje tedenciju promjena.
To je drugo što netko vidi promjene prije nego se u potpunosti manifestiraju…a netko ih tek uoči nakon nekog vremena nakon što se manifestiraju.

Tako recimo imaš osobu koja je u potpunosti opisala bitcoin još tamo 1999:


…a netko dan i danas ne zna što je BTC.

Nećemo skretati na btc nadam se…poanta je samo malo u vizionarstvu…i ti nemaš baš nikakve osnove da kažeš da se promjene ne dešavaju.
Samo moje tipkanje na ovoj temi je dio tih promjena koje se dešavaju. Misliš da sam jedini na svijetu koji razmišlja o ovim stvarima? Da sam baš ja samo taj koji je imao tu čast prepoznati ove ideje koje svemir emitira?

Velim ja…ovo što govorim manifestirat će se 100% … tj već se manifestiralo, ako pogledaš sukladnost DIV-a i SPAN-a. Samo je pitanje na koji način će dalje prodjeti da se porikta sve što je nastalo iz toga DIV-a i SPAN-a.

I što se tiče naivnosti…svjestan sam ja još jedne stvari. Sav napretak koji se dešava na svijetu…nose zaslugu i oni koji su pokušali u tom segmentu i nisu uspjeli isto kao oni koji su pokušali i uspjeli. Jednostavno, napredak se ne može ostvarivati tako da imaš masu ljudi koji 100% uspijevaju u nečemu. Upravo je potrebna neka masa koja će pokušati…da bi ona tvorila taj dio mase koja će uspjeti. Znači napretak je pogonjen cijelom masom…pa čak i onima koji ne vjeruju da se promjene dešavaju. (Oni su dio inertnosti sustava, koji je također potreban dio)
Stoga…nemam ja nikakvog problema sa naivnošću…dapače, podosta sam svjestan sebe i svojih ograničenja…i koja svrha u konačnici iza toga leži. Peace :wink:

Bacit ću pogled što je to, fala :wink:

@bozoou

Ja ne primjećujem suštinsku razliku izmedju toga što ti nudiš(?) i npm packages načina.
Treba mi paket - uzmem ga. Ne svidja mi se - deinstališem i uzmem drugi.
Koji tačno vidiš problem u ovakvom pristupu?

Kako ne vidiš?

…pa kako je tim pristupom riješen problem Pere iz uvodnog posta?

…kako bi tim pristupom riješio problem da napraviš CRUD komponentu koja se lako umetne u bilo koju okolinu?
…kako bi tim pristupom napravio recimo komponentu “Forum” koja će se savršeno uklopiti u neki widget unutar neke postojeće stranice …a da je plug and play i da ga upogone postojeće komonente na toj stranici?
Tako da taj forum dodatno ne otežava load stranice sa nikakvim svojim HTML pratećim elementima…osim što donosi code koji je potreban da se opiše funkcionalnost foruma,
no ne i UI komponenti od koje je složen forum. Pod pretpotavkom da sve te komponente već postoje na stranici gdje ugrađuješ forum…a gotovo da postoje na svakoj stranci.
Evo, pogledaj ovaj forum i upri u komponentu koja ne postoji na nekoj prosječnoj stranici? Nema takve…tj. jedino ovaj “pametni slider” desno od postova s kojim se može brzo doći do postova koji će se asinkrono učitati.

I u tome je čarolija, u različitim “tijelima” bi ovaj forum zaživio bez problema…kvalitetnije tijelo bi ga kvalitetnije manifestiralo…no suštinska funkcionalnost bi uvijek ovisila o samoj komponenti “FORUM”, a kvaliteta UI-a bi ovisila od kvalitete komponenti koje već čine UI na stranici i koje bi manifestirale forum.
No čarolija je upravo u tome…što bi taj forum onda konstantno prolazio svoju evoluciju, kako bi evoluirale komponente koje ga manifestiraju.

Znači…gotovo je teško staviti u istu rečenicu ovo sa dosadašnjim NPM načiniom rada. NPM je jedino ušao u sferu da ti poinstalira cijeli dependency za neku komponentu…i to je super. Ovo dalje je samo layer koji bi se gradio nad time, ne kontra toga.

Nije modularno po principu plug and play.
…i onda zbog težine usklađivanja postoji limit kompleksnosti komponenti koji se (u razumnom roku) može doseći.

[korisnik dmitrecic i dalje razmišlja o problemu za koji bi ovo rješenje bilo primjenjivo i smisleno]
:smiley:

[korisnik Tpojka se i dalje drži principa]

4 Likeova

Upravo to. Ako radi - ne diraj. I - ne smišljaj rješenje za problem kojeg nema (ovo obično žene/supruge rade) :smiley:

Ja sam naprosto oduševljen kako ne vidite problem :smiley: tj. koji potencijal se skriva iza onoga što se može unaprijediti.

U principu ideja bozooua nije losa. Samo je on u k.urcu s objasnjavanjem i zagonetkama :stuck_out_tongue:.
Ovak sam ja to skuzio… Npr. pimjer iz realnog svijeta:

Ides dati reklamu na jutarnji.hr. Jutarnji ima svoju implementaciju modala ( pop up-a). Umjesto da dajes njima samo dio koji ide u popup, te ga onda oni moraju sami implementirati unutar svog modala, ti im posaljem js kod koji poziva npr.
modal.open(tvojHTML);
Automatski se otvori modal od jutarnjeg. Istu stvar onda mozes poslat i vecernjem i nitko nista ne treba implementirati.

Ovo sto je belmin rekao je na pragu toga. Kolko kuzim ti tamo definiras template-e te ih onda mozes programatski pozivati. Ali treba jos to malo proucit.

S obzirom na trenutno stanje web-a, nacine na koji se danas rade stranice i tona raznih “best practice”-a, mislim da je ovako nesto implementirati jako tesko. Problemu treba pristupiti vrlo oprezno da se ne bi desilo da sam sebe zatvoris u nekakvo predifinirano stanje.

1 Like

Vjerujem da sam u k.urcu, najteže je kod sebe kontrolirati što se izgubi u prijevodu rečenog…kada se u mojoj glavi ništa ne izgubi dok pričam, hehe.

Tako je…to je konačna dobit, implementacija se svodi doslovice na “pomisliti”. Što će tek jednog dana doći doizražaja kada propričamo sa računalima.
Sigurno neću reći računalu: “Daj mi ubaci XY komponentu” …a da me on onda tlači sa glupim pitanjima: “A kak buš to povezao s dropdownovima…a kako ovo? …a kako ono?”
Rekao bi mu: “Hebote, jel ti treba nacrtati ili koji problem imaš?”
A to je otprilike današnji pristup, gotovo do u pixel moramo “nacrtati” ono što kreiramo.

Tako da nema smisla da se vozamo oko razno razne implementacije koja treba doći sama po sebi. Jer se zna što se treba desiti….neka se onda i samo od sebe desi.
Jedino što treba implementirati / konfigurirati …jeste ono što komponenta namjerno daje developeru na volju da se kustomizira po želji.

Direktna dobit iza toga je ta, da ako se jednostavne stvari ugrađuju na “pomisliti” …kakve će se onda tek stvari moći implementirati uz malo truda? Nebo je granica… …današnje komponente nisu “k” od toga!

Tako da, za one koji ne vide problem…možemo se složiti i da nema trenutno problema. Ali onda treba biti svjestan da uvođenjem ovako nečega moguće oslobađamo neviđen potencijal.
Opet ću se osvrnuti na WP …koliko god to bili loši ili dobri temelji…ti temelji su otključali enorman potencijal i nastalo je to da danas imamo preko xx% stranica napravljenih u WP-u. Koliko god on bio loš…dominira.
Slično tako, nesvjesni smo što bi mogla napraviti sienergija zajednice developera…kada bi se njihov rad počeo usložavati po dobro definiranom konceptu.

I opet mi nije baš jasno, pa zar to ne možeš raditi s embedded kodom, ili u krajnjem slučaju s iframeom?
Embedded code možeš o stilizirati u skladu s svojim siteom
Zato mi i nije jasan cijeli koncept kojeg bozoou želi dočarati.
Pokušavam shvatiti primjerice te komponente koje bi trebalo biti jednostavno koristiti, ali ispada daleko kompliciranije nego s postojećim. Neki frameworci imaju to riješeno da je jednostavnije za korištenje (kako je izjavio gore za CRUD), ali ni to nije valjda dovoljno jer bi trebalo postaviti i input boxove (ovisno o permissionima usera) ali tako da se ne generiraju html input tagovi (ovo mi nikak nije jasno :slight_smile: ). Međutim, uzmimo u obzir da je sve tak i da smo se razumjeli, međutim kako ćeš tada označiti u komponenti da primjerice select mora biti multiselect? Dakle, u komponenti bih morao definirati “hrpu” propertya, pa je pitanje što mi je bolje i brže, i nad čime imam veću kontrolu?
Ja ne kažem da bozoou možda i misli na super stvar, ali ja fakat se trudim cijeli dan (u prikrajku mozga) shvatiti o čemu se zapravo radi jer je predstavljeno kao fantastičan pristup (ponavljam možda i jest, ali ja za sad ne vidim ništa što već nije prisutno).
Ok, dajem za pravo da baš i nisam najbistriji :smiley:
(al trudim se, slobode mi!)