Open source modulárny CMS v Nette

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tolljump
Člen | 47
+
+10
-

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
+
0
-

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
+
+7
-

Čtu opensource a nevidím link na github. :) :)

Zní to velice zajímavě, ne že ne. Jen bych to rád prozkoumal..

Myiyk
Člen | 321
+
+1
-

Já to pochopil že teď to opensource není.

Určitě mám zájem se na ten kód mrknout, podle toho popisku to vypadá hodně zajímavě.

Akorát tu otázku se zpětnou vazbou moc nechápu, bez kódu zpětnou vazbu se dává špatně.

Editoval Myiyk (13. 7. 2017 22:34)

besir
Člen | 170
+
0
-

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
+
0
-

Ď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
+
0
-

@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
+
0
-

@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
+
0
-

@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
+
+2
-

@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
+
0
-

@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
+
0
-

@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:

  1. 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)
  2. 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
+
+5
-

@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
+
0
-

@tolljump Jasné, tady je pár odkazů pro začátek :)

Moc pěkně o tom píše Freek Van der Herten

Editoval Tomáš Votruba (20. 7. 2017 18:00)

GEpic
Člen | 566
+
+1
-

krátký a vtipný talk od autora composeru :)

@TomášVotruba díky moc za tohle video

Editoval GEpic (20. 7. 2017 20:10)