BP: Nette CRUD generátor (scaffold)

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

Zdravím,
chtěl bych vás touto formou požádat o nějaké informace k připravované bakalářské práci.

Cíl BP: Vytvořit řádkový nástroj pro generování aplikace se základní CRUD funkcionalitou ve frameworku Nette.

Stručnej popis: Na základně vytvořené DB (InnoDB tabulek s FK nebo tabulek s konvenčně pojmenovanýma sloupcema) nebo Doctrine modelů vygenerovat Nette aplikaci se 2 typy modelů (Nette\Database & Doctrine) s CRUD funkcionalitou.

Vzhledem k tomu, že tohle téma bylo zadáno, tak nic takového by nemělo existovat. Samozřejmě jsem hledal a našel tohle a tohle, ale všechno je to hodně starý, nic aktuálního jsem nenašel. Tady jsem se dozvěděl, že (asi) neexistuje.

Takže bych se rád zeptal, jestli někdo na podobném projektu náhodou nepracuje nebo o něčem takovém neví. Dál by se mi hodilo vědět jaký na to všeobecně máte názor, v případě že se tu vyjádří někdo hodně zainteresovaný do vývoje FW, proč něco takového neexistuje oficiálně a klidně i názor „začátečníků“, jestli by jim to třeba pomohlo v tom, že by dostali hotovou aplikaci, kterou by mohli zkoumat, např. pochopit k čemu že je třeba ten model dobrej či cokoliv jinýho. Meze se nekladou, jakejkoliv názor dobrej názor.

Doufám že si na mne uděláte chvilku času i přesto, že dolaďujete poslední detaily Nette 2.1. :)

Díky,
Mysteria

Filip Procházka
Moderator | 4668
+
0
-

Generování crud jde přímo proti filosofii Nette Frameworku, což je taky důvod proč žádný do teď neexistuje a všechny pokusy umřely. Takže na rovinu, nevybral jsi si zrovna nejlepší téma.

Raději napiš bakalářku o tom, jak vytvořit v Nette crud pomocí kompozice a znovupoužitelných komponent bez generování :)

David Grudl
Nette Core | 8147
+
0
-

Co by se hodilo, tak tool na generování prázdných presenterů a šablon.

llook
Člen | 407
+
0
-

Já bych to úplně nezavrhoval. Tohle jsem ke scaffoldingu napsal před rokem:

Pokud řešením nějakého problému je udělat 10× copy&paste s nějakou drobnou změnou (nic jiného ty generátory nedělají), tak ten problém lze také zobecnit tak, aby nic takového nebylo potřeba.

Kdyby výsledkem mělo být právě to zobecnění, tak by to mohlo být užitečné. Tedy ne primárně generátor, ale knihovna, která dynamicky podle nějaké konfigurace vytváří různé komponenty (např. podle toho db schématu), které pak lze nějak dál doupravit – předefinovat metody, navěsit události, překrýt bloky v šablonách apod.

Kdysi jsem zkoušel scaffolding v Symfony1 a byl to děs. Vygenerované view bylo spousta HTML a jakmile jste do něj zanesli nějaké změny, tak už jste si znova ten základ přegenerovat nemohli – přepsali byste si změny. Kdyby se ale generované view omezovalo pouze na {% extends '...' %} s tím, že bych si předefinoval jenom bloky, které potřebuju jinak, tak bych klidně mohl přidat další sloupec a ponechat stejnou šablonu. Totéž platí i pro controllery a model.

Kdyby pro základní CRUD stačilo přidat jednoduchý presenter, který nedělá nic jiného, než že dědí od nějakého chytřejšího presenteru plus nějaké to nastavení a pár šablon, které také pouze dědí od chytřejších šablon, tak tento základ by klidně mohl dělat ten generátor. Ta hlavní práce by ale byla na knihovně.

Pseudokód, jak by cca mohla vypadat ta generovaná část kódu:

// UserCrudController.php
class UserCrudController extends EntityCrudController
{
	const ENTITY_CLASS_NAME = 'App\\Model\\User';
}
{* User.edit.latte *}
{extends $baseTemplate}

{* User.view.latte *}
{extends $baseTemplate}

{* User.list.latte *}
{extends $baseTemplate}
Filip Procházka
Moderator | 4668
+
0
-

David Grudl napsal(a):

Co by se hodilo, tak tool na generování prázdných presenterů a šablon.

Jeden takovej znám, jmenuje se to „šablony souborů“ a umí to každé IDE :)

Mysteria
Člen | 797
+
0
-

@Filip Procházka: Takže jestli jsem to správně pochopil, tak žádný oficiální ani nikdy existovat nebude a ty pokusy lidí selhali na nezájmu ze strany komunity okolo Nette (proč dělat něco, co nikdo neocení, protože to jde proti filozofii)?
To jestli jsem si vybral nebo nevybral dobře uvidíme za rok, osobně doufám v tu první variantu. :)

@David Grudl: Obávám se, že tohle by na BP nestačilo.

@llook: Nejsem si úplně jistej, jestli tě správně chápu. Ten problém s přegenerováním upraveného kódu je mi jasnej. Ale ten „jednodušší“ a „chytřejší“ presenter – tím jednodušším myslíš ten svůj vlastní, kde by sis mohl dělat ty svoje změny a chytřejším ten generovanej s tím CRUDem, který by se dal v případě potřeby znova přegenerovat a nijak by tím nenarušil tebou provedené úpravy v těch „jednodušších“, nebo jsem vedle jak ta jedle?

llook
Člen | 407
+
0
-

Ten chytřejší by nebyl generovaný. Byl by prostě natolik obecný, že by pro získání základní funkčnosti nebylo potřeba o moc víc, než podědit třídu nebo použít trait. Něco jako generic views v Djangu, nebo dynamic scaffolding v RoR (akorát lépe rozšiřitelný).

Editoval llook (18. 12. 2013 23:03)