Až Vám zčerná obrazovka, přejděte na Linux!

Proč používat Linux

úterý 3. června 2008

Ať žije frameworkování - 2. díl

Dneska jsem si přečetl zajímavý článeček na Sys-Conu, který dokazuje, proč je funkcionální programování lepší než stávající trendy OOP v Javě.

Tím by ani nebyl onen článek tak zajímavý, obzvláště proto, že není logicky korektní a v důkazu excelentnosti JVM jazyka Scala používá mimo jiné metodu, u které sám píše, že je "more difficult to understand":
class CharReader (r: Reader) extends Reader {
override def repeatForEach (f: String => Unit) = {
r.repeatForEach ((s: String) =>
s.toList.foreach ((c: Char) =>
f (c.toString)));
}
}


Mnohem podstatnější je ale následující ukázka kódu:
public static void main(String[] args) {

BeanFactory factory =
new XmlBeanFactory(new FileSystemResource(“applicationContext.xml”));
Reader arrayReader = (Reader) factory.getBean (“arrayReader”);
Reader charReader = (Reader) factory.getBean (“charReader”);

String s = arrayReader.read();
while (s != null) {
System.out.println (s);
System.out.println (charReader.read());
s = arrayReader.read();
}
}

Nikdo nemůže říct, co tento kód udělá, protože veškerá jeho logika je dána ve Springové konfiguraci. Readery mohou být propojeny či mohou být nezávislé, nikdo neví, co vlastně čtou atd. atp. . Sice se to lehce píše, ale odladit to... a případně po někom převzít či se k tomu po roce vrátit...

Proto frameworky raději nepoužívám a pokud ano, pak s velikým odporem. Leda by to byty ty základní, utilitózní, jako je třeba log4J či SaX/DOM. A pokud už nějaký použiju, musí být naprosto jednoduchý a přímočarý, bez jakýchkoli automagismů, jako třeba FreeMarker či servlet container.

3 komentáře:

Wu řekl(a)...

No jo - ale nevede to k tomu, že si pak píšeš frameworky vlastní, které krom obdobné složitosti jsou navíc ještě neznámé, nestandardní a nedokumentované? ;)

Oto 'tapik' Buchta řekl(a)...

Jo, to máš pravdu. Jenomže většina mých frameworků je
a)plně zdokumentovaná javadocem
b)na řádově desítky řádků :-)
Víš, já jsem zastáncem toho, aby byl framework vždy minimalistický, čistá implementace triviální logiky nad konkrétním rozhraním. Něco jiného jsou knihovny funkcí, tam si klidně lajznu jít do tisíců řádků kódu, ale to je něco trošku jiného. A stejně pokaždé, když nějakou takovou knihovnu použiju, si vždy setsakra dobře rozmyslím, jestli nejdu s kanónem na vrabce. Viděl jsem implementaci "Hello,world!" na jeden, tři, deset či padesát řádek kódu, dokonce na 6 stran A4 hustě popsané. V prvních případech se jednoduše vytvořila minimalistická struktura a kód obsahoval jediný řádek, obdobu System.out.println("Hello, world!");
Ten nejšílenější případ byl nějaka objektová hrůza v TurboVision, která si instanciovala bůhvíco všechno, všechno možné maskovala a výstup tlačila přes nějaké interceptorované streamy, aby nebyly odchycené nějakým EventHandlerem... A oboje udělalo totéž - na konzoli to vypsalo jednu větu.
Tolik asi k vlastním frameworkům...

Wu řekl(a)...

Jo, já to chápu. Už jsem z těch monster tak nějak ...unavený. Bohužel někdy se jim vyhnout nedá.