Open source modulárny CMS v Nette
- tolljump
- Člen | 47
Pozdravujem všetkých!
Mal by som niekoľko cielených otázok na všetkých ktorí pracujete vo firmách na rôznych webových projektoch:
- prečo podľa vás doterajšie projekty CMS systémov v Nette (https://pla.nette.org/…ky-nad-nette) nemajú ďalší vývoj a podporu?
- prečo sa každý zameral len na „CMS“ ako také?
- používate niekto aktívne tieto opensource vo firmách s pravidelným nasadzovaním na komerčné projekty?
- alebo naopak vyvíjate vlastný CMS? – úprimne, akú ma úroveň a aký programátori na ňom pracujú?
Prečo sa to pýtam?
Za posledných 7 rokov sme vybudovali viacero zaujímavých funkčných
projektov v Nette.
No nemáme pocit že starší systém na ktorom sme tieto projekty budovali ma
potenciál byť veľmi úžasný, veľký no hlavne prívetivý pre
profesionálov. Chýbali mu testy, ako taká rozumná architektúra, chybný
návrh a opakovaný kód, závislosti ktoré sa nedajú odstrániť, žiadne
rozdelenie na drobné moduly, komponenty, extensions, pluginy, atď.
Poznáte to?
Na čo sme ale prišli?
Vyvíjať jednoúčelový systém vo firme pre pár projektov ročne nie je ekonomické pre žiadnu bežnú firmu na SK ani v CZ (samozrejme ak nepoberáte nejaké tie príspevky z EÚ).
Čo sme spravili vo WAME.sk?
Vybudovali sme za posledný rok nový, štandardizovaný, modulárny, prehľadný a logicky rozdelený informačný systém v Nette fw. Nie CMS, nie ERP, ani iné jednoúčelové systémy. Univerzálna architektúra pre akýkoľvek typ projektu.
Nazvali sme ho WAME IS
(ako všeobecný „informačný systém“)
- Cieľom bolo vytvoriť čistý kód podľa svetových štandardov (aj podľa iných frameworkow) aby nebol vývoj závislý na jednom tíme programátorov.
- Vytvoriť modulárnosť a nezávislosť jednotlivých repozitárov
- kód v angličtine, každému repozitáru dať readme pre inštaláciu, použitie a príklady
- postupne pokrývať unit testami všetky dôležíté súčasti
- neopakovať rovnaký či podobný kód a využívať výhody DI
- nastavovanie modulov a všetkého čo sa dá prostredníctvom .neon configov (darí sa nám)
- vyriešiť automatickú inštaláciu balíkov a rozšírovanie balíkov navzájom (bez nutnosti zložitých integračných postupov vrámci kódu)
Čo z toho teda vzniklo?
ArticleModule – práca so základným článkom (titulok, perex, text)
CategoryModule – práca so stromom kategórii všeobecne
ArticleCategoryPlugin – prepojí modul kategorizácie na články
ďalej napr. GalleryModule – dopĺňa formulár o multiupload fotografií
a náhľady (+ práca s nimi)
následne tiež ArticleGalleryPlugin – prepojí modul galérie
na články
SeoModule – …
ParameterModule – …
TagModule – …
...........
Teraz si **predstavte vytvoriť ProductModule pre produkty v eshope. **
Obsahoval by základné info o produkte – titulok, popis, ean, plu, …
Na všetko ostatné čo už máme vytvorené poslúžia pluginy (tie sú asi tak
10–100 riadkov kódu v 1–5 súboroch)
- ProductCategoryPlugin
- ProductSeoPlugin
- ProductParameterPlugin
- ProductTagPlugin
Hotovo…
Týmto spôsobom sme vytvorili už niečo okolo 160 rôznych modulov, komponentov a pluginov. Každý z nich je jednoúčelový, logika a kód sa neopakuje v žiadnom z nich. Spoločné prvky držíme v Core (tiež samostatný repo) a v ďalších nezávislých repozitároch ako traity, alebo triedy.
Za všetkým stojí tzv. PluginLoader, ktorý dynamicky
spája .neon súbory (podľa závislosti a vnorenia v composer.json).
Vďaka tomu sa .neon súbory automaticky spoja zo všetkých inštalovaných
modulov, komponent a pluginov.
Čo nám to vyriešilo?
Večný problém preťažovania kódu ktorý bolo potrebné upraviť pri rôznych zadaniach.
Predstavte si formulár Nette:
protected function createComponentRegistrationForm()
{
$form = new UI\Form;
$form->addText('name', 'Meno:');
$form->addPassword('password', 'Heslo:');
$form->addSubmit('submit', 'Odoslať');
$form->onSuccess[] = [$this, 'registrationFormSucceeded'];
return $form;
}
Je to základné použitie ktoré má ale svoje problémy pri narastajúcom
projekte.
Pochopiteľne, takýto formulár by ste oddelili do vlastnej triedy,
zaregistrovali ako service a používali na viacerých miestach.
Formulár by ste umiestnili do vlastnej komponenty, vytorili by ste repo a
inštalovali cez composer do zložky /vendor. Čo ak ale chcete formulár
v danom projekte upraviť? – doplniť, odstrániť, upraviť poradie
jednotlivých prvkov? Už to začne byť zložitejšie.
Nemožete predsa zasahovať do kódu.
Ako to funguje vo WAME IS?
Modul by mal vlastný config a v ňom:
RegistrationFormBuilder:
class: Wame\DynamicObject\Forms\EntityFormBuilder
setup:
- setRepository(@UserRepository)
- add(@Wame\DynamicObject\Forms\Containers\INameContainerFactory, "NameContainer", {priority: 90})
- add(@Wame\DynamicObject\Forms\Containers\IPasswordContainerFactory, 'PasswordContainer', {priority: 80})
- add(@Wame\DynamicObject\Forms\Containers\ISubmitContainerFactory, "SubmitContainer", {priority: 10})
Jednotlivé containery sú vytvorené len raz pre rôzne inputy, ktoré reprezentujú columns v entitách. Preto aj tá metóda setRepository, vďaka čomu formulár vie kde má odoslaný formulár ukladať.
Ak by som chcel formulár upraviť, doplniť, tak môžem do svojej aplikácie v zložke /app zadefinovať nový config v ktorom zavolám službu RegistrationFormBuilder a cez setup metodu jednoducho pridam dalsie inputy, alebo cez gettery zavolám už vytvorené containery a upravím ich. Prípadne zavolám metódu remove(NazovContainera) a odstránim nežiadúce prvky formulára.
** Na podobnom princípe vo WAME IS funguje X ďalších súčastí: **
- permissions
- rôzne settings modulov a komponent
- API vrstva generovaná automaticky z repozitárov
- eventy
- commands
- komponenta pre Gridy (využívame hlavne v AdminModule)
- rôzne ďalšie nastavenia modulov a komponent…
Čo je vlastne cieľom tohto môjho príspevku?
- zistiť, či by bol záujem jedtnolivcov a firiem o spoločný vývoj a prácu s takýmto systémom?
- prípadne či by ste mali záujem o komerčné využitie a vývoj nových súčastí?
- hľadáme spätnú väzbu s názormi na myšlienku
- hľadáme cestu ako tomuto projektu dať väčší záber a pohrávame sa s myšlienkou komunity okolo open source.
Ďakujem v mene všetkých kolegov a seba za otvorenú diskusiu.
Editoval tolljump (13. 7. 2017 17:39)
- Martk
- Člen | 661
Dávám palec nahoru, že vzniká nějaký takovýto projekt nad nette a přeji mnoho úspěchů. Líbí se mi myšlenka formulářu, škoda pro mě, že je to v neonu :(
Toto budu psát z vlastní zkušenosti:
Config loader: Když jsem vytvářel první verzi cms, tak jsem
šel taky touto cestou, ale vznikala u toho velká režie: Muset psát
v composer.json cesty k neonu, uchovávat informace (u tebe asi celý
jednotný neon soubor) o neon souborech, jejich includování, co když nechci
načítat neon soubory z knihovny? Možná je toho více, už je to asi rok, co
jsem to zavrhl a nahradil něčím jiným.
Vše v konfiguračním souboru: Tady je to o osobních preferencích, ale osobně to nemám rád, protože mi to ide jednoduše nenapoví ⇒ musím to vygooglit, podívat se do php kódu nebo do dokumentace.
Nějaký veřejný link na kód?
- Pavel Janda
- Člen | 977
Čtu opensource a nevidím link na github. :) :)
Zní to velice zajímavě, ne že ne. Jen bych to rád prozkoumal..
- besir
- Člen | 170
OFF topic >> Ha, už je to nějaká doba co jsem měl obdobnou myšlenku (né vytvořit takhle obrovský „IS“, ale v podstatě jen balíčky rozšiřovatelné CMS). Došlo k pár věcem které to nějak překazily, třeba nepodpora týmu u tehdejšího zaměstnavatele a ve finále díky tomu i nepodpora zaměstnavatele jako taková. Ikdyž jsme se dostali i k nějaké veřejné prezentaci. Po mém odchodu z firmy bohužel celý projekt zařízli. <<
K tématu >> Za mě rozhodně palec nahoru, možná bychom se mohli na spolupráci také podílet, ale chtělo by to nějaké konkrétnější informace, náhled na běžící applikaci, nějaké střípky toho jak je to napsané. OS chválím, ale je to vcelku těžké s něčím takovým vylézt. Pro inspiraci mrkněte na bussiness model Odoo.
Editoval besir (15. 7. 2017 12:24)
- tolljump
- Člen | 47
Ďakujem za váš feedback.
@Martk náš config loader nepotrebuje žiadne definovanie
v composer.json. Princíp je pomerne jednoduchý – Finder vyhľadá .neon
súbory vo všetkých balíkoch, tie spojí a uloží v cache. Samozrejme má
to svoje úskalia – podľa require composer.json určujeme automaticky
prioritu .neon súborov.
Čo sa týka toho že väčšina nastavení je v config súboroch, tak IDE
ako PHPStorm napovedá aj v .neon súboroch. Prehľadnosť je o pomerne
v pohode.
Pre lepšiu prehľadnosť v projekte pracujeme s .gitmodules, vďaka čomu sú
všetky balíky nainštalované vrámci jedného „superprojektu“.
@PavelJanda áno, narážal som na ostatné Opensource CMS ktoré v Nette vznikli, chcel som vidieť váš názor na tie ktoré už existujú. Čo sa týka nášho WAME IS, chceli by sme spraviť funkčnú ukážku z niekoľkých modulov.
@Myiyk Na začiatok som chcel spätnú väzbu aspoň sa samotnú ideu a potenciál takéhoto projektu. Tiež o feedback programátorov, či by mali záujem podieľať sa na vývoji.
@besir Pre nás to bolo rozhodnutie práve z dôvodu spokojnosti programátorov, aby sa nám pracovalo dobre v budúcnosti. Vedeli sme že náš starší systém nie je architektúrou dobrý.
Kto z vás má skúsenosti s vlastným open source?
Aký je reálne záujem komunity pridať sa k vývoju?
Obávame sa skôr situácie že viacero ľudí by začalo projekt len
využívať, no nepripájali by sa k vývoju a nám by to len pridalo na
práci – odpovedať na issues a rôzne otázky ohľadom použitia a
implementácie.
Čo si myslíte?
- Pavel Janda
- Člen | 977
@tolljump Já si myslím, že si nic myslet nemůžeme, doku není kód.
Tvůj projekt zní hezky, to už jsem říkal. Když bude dobře napsaný a funkční, budou ho lidé používat a příspívat do něj. Když bude stát za prd, tak ho lidé používat nebudou a nebudou do něj ani přispívat. Toť vše.
Koukni se na github a populární nette balíčky a na míru, jakou lidé přispívají do daného kódu.
- Pavel Janda
- Člen | 977
@tolljump Ještě jsem si všiml tvé poslední věty. Tedy „nechceme, aby nám dalo práci odpovídat na issues, ve kterých budou lidé řešit implementační otázky“. Tomu úplně nerozumím. Pokud přijdu a uvidím, že lze něco napsat lépe, je přeci úžasné, pokud to s vámi budu chtít (opensource ⇒ zadarmo) probrat na githubu. O to tedy – pokud to chápu správně – nestojíte?
A ještě odpovím na větu nad tím: jasně, že projekt bude víc lidí používat než do něj přispívat. Odhadem 100:1. Tzn, když bude váš IS používat 100 lidí, přispěje vám 1 člověk. na druhou stranu, pokud to bude dobrý projekt, zmůže uživatelská základna o velikosti 10k lidí velké věci.
- tolljump
- Člen | 47
@PavelJanda Ďakujem za tvoju odpoveď. Určite sa posnažíme čím skôr sprístupniť ukážku ktorá by zaujala na prvý pohľad.
Určite som nechcel povedať že by sme nestáli o prispievanie, práve naopak samozrejme. Skôr som sa obával toho, že práve 99 zo 100 sa bude len neustále pýtať, dopytovať nové features a nebude ničím prispievať.
Hľadáme motivačný biznis model ktorý by pomohol firmám a jednotlivcom používať niečo, čo má vývoj a zároveň si vedia doprogramovať sami akúkoľvek funkcionalitu.
- Pavel Janda
- Člen | 977
@tolljump Vážně doporučuji projet si oblíbené balíčky a aktivitu přispěvatelů. Jsou to reálná data → člověk se tím dozví nejvíc. :)
- Tomáš Votruba
- Moderator | 1114
@tolljump Na to, aby maintanování zůstalo zábavou, existuje pár tipů duševní hygieny open-source. Oboustranně bezpečné stanovování hranic, jasná pravidla pro issues, konverze leadů do PR a testy rád zaučím, až do toho půjdete ;)
- newPOPE
- Člen | 648
@tolljump chcelo by to naozaj vidiet aspon sneak peak toho co vlastne
WAME IS je a na co je?
Neberte to zle ale „univerzalna arch. pre akykolvek projekt“ mi nepride (moj
nazor) ako dobre oznacenie/reklama.
Pokial viem tak vyvoje su povacsine rozdelene na 2 hlavne typy:
- som agentura ktora masti jeden web za druhym a ked ich je uz par desiatok tak je obrovsky problem ich udrziavat nehovoriac o tom, ze kazdy druhy projekt s ktorym som sa v SK stretol bol polepeny bez akehokolvek naznaku pokracovania do buducna (vid. napr. https://medium.com/…e5de1962c889)
- inhouse vyvoj v ktorom sa dane systemy robia na kluc. Ak je to dobre napisane tak je v podstate mozne menit komponenty, subsystemy ako na beziacom pase. Nebodaj niekto pouzije hexagonal arch. tak napr. take Nette tam hra len zanedbatelnu ulohu.
Na zaver, budem WAME sledovat nadalej a drzat palce aby sa Vam podarilo nieco ako Laravel-u :)
- tolljump
- Člen | 47
@PavelJanda urcite, dava to zmysel, samozrejme mame vypozerane viacere
uspesne/neuspesne repozitare.
@TomášVotruba to by ma celkom zaujimalo ;-) Nejake odkazy?
@newPOPE u nás sme prešli aj typom 1 a momentálne sme v type 2, aj
keď ideálny by bol typ 3 – vyvýjať jeden projekt na vlastnom riešení.
Očakávame ktorému z projektov sa začne výnimočne dariť a pri ňom budeme
mať priestor rozvíjať WAME IS na plno.
Zásadný problém ktorý chceme vyriešiť, je práve nedostatok skúsených hláv, ktorí by sa vyjadrili a pomohli k vyriešeniu viacerých problémov na ktoré sme ešte nenašli odpovede – rsp. nemali sa im ani čas venovať.
Ok teda, najbližší náš cieľ je sprístupniť sandbox s inštaláciou nejakých základných modulov do jednoduchého DEMO projektu. Dám echo hneď ako to spracujeme ;-)
- Tomáš Votruba
- Moderator | 1114
@tolljump Jasné, tady je pár odkazů pro začátek :)
Moc pěkně o tom píše Freek Van der Herten
- https://laravel-news.com/podcast/37 – podcast, první část je super
- https://murze.be/…rce-software
- a taky http://jlongster.com/…-Open-Source
- krátký a vtipný talk od autora composeru :)
Editoval Tomáš Votruba (20. 7. 2017 18:00)
- GEpic
- Člen | 566
krátký a vtipný talk od autora composeru :)
@TomášVotruba díky moc za tohle video
Editoval GEpic (20. 7. 2017 20:10)