Merb je webový MVC framework silně inspirovaný frameworky Ruby on Rails a Django. Jeho vývoj započal zakladatel Engine Yardu Ezra Zygmuntowicz. Původně vznikl jako jednoduchý patch do Rails, který měl umožnit rychlejší uploadování souborů. Merb byl tehdy pouhý mongrelový handler, postupně se z něj vyvinul plnohodnotný webový framework.
Za Merbem stála firma Engine Yard. Dalšími z jejich projektů jsou například implementace Ruby Rubinius nebo DataMapper ORM.
Vývoj frameworku byl ukončen v roce 2010 ve prospěch integrace jeho klíčových konceptů (mj. modularita, exaktně definované veřejné rozhraní) do Ruby on Rails verze 3.[1][2]
Filosofie
Ačkoliv je Merb na první pohled velmi podobný Rails, oba frameworky mají dost odlišnou filosofii. Kdežto Rails jsou navrženy tak, aby podporovaly software vyhovující jejich tvůrcům, Merb se snaží být co nejvíce konfigurovatelný. Pokud v Merbu chcete změnit testovací framework, stačí změnit jedinou řádku v konfiguraci. Pokud to samé chcete v Rails, máte problém. O nepodpoře jiných šablonovacích systémů railsovými generátory nemluvě. Merb je tedy agnostický k šablonovacímu jazyku, testovacímu frameworku, javascriptovému frameworku i ORM. Volba nástrojů je u Merbu na uživatelích frameworku, nikoliv na jeho tvůrcích.
Merb se také snaží dodržovat styl jazyka Ruby a nevymýšlet si zbytečně vlastní metajazyk. Merb nedělá z Ruby něco jiného než je, jako se o to snaží Rails. To kritizovalo velké množství vývojářů, mezi nimi i designer a autor jazyka Ruby Jukihiro Macumoto zvaný „Matz“. Ten si Merb oblíbil a používá jej pro vývoj ve své firmě.
Proč používat Merb
- Vývojáři dbají i na rychlost a hardwarovou nenáročnost Merbu. Pomalost je brána jako bug.
- Je jednoduše konfigurovatelný.
- Výjimky routuje na kontrolér Exception.
- Slices umožňují psát pluginy obsahující hotové části aplikace.
- Part kontroléry řeší logiku jednotlivých podčástí stránky přímo nesouvisejících s hlavním obsahem.
- Obsahuje podporu testování
- Je kompatibilní s Passengerem, vaše aplikace bez problémů poběží na serveru Apache.
Architektura
Modely
ORM
DataMapper
DataMapper je zdaleka nejpoužívanější merbové ORM. Mezi jeho největší výhody patří automigrace. Stačí v modelu nadefinovat jaké bude mít vlastnosti a pustit automigrační task (rake db:automigrate) a příslušně databázové schéma bude vytvořeno. Pokud změníte libovolnou vlastnost v modelu, stačí pustit rake db:autoupgrade a struktura databáze bude změněna bez ztráty dat.
Za DataMapperem, stejně jako za Merbem stojí Engine Yard a hodně vývojářů Merbu se podílí i na DataMapperu a naopak. Mají proto podobnou filosofii. Zatímco Merb je agnostický k ORM, JavaScriptovému frameworku a šablonovacímu jazyku, DataMapper je agnostický k úložišti. Tím může být nejenom relační databáze, ale třeba YAML, CSV nebo CouchDB.
Stejně jako u Merbu, i u DataMapperu je kladen důraz na rychlost a čistou Ruby syntaxi, kterou se vyjadřují i věci, na které je v ActiveRecordu použít SQL podmínku.
Sequel
Sequel je minimalistické ORM zaměřené především na snadné a mocné dotazování.
ActiveRecord
ActiveRecord je ORM z Ruby on Rails. Je stabilní a odladěné, na druhou stranu ale pomalé a se syntaxí nutící psát SQL podmínky. Používalo se spíše dříve, když DataMapper nebyl ještě dostatečně odladěný.
Kontroléry
Part kontroléry
Kromě běžných kontrolerů podporuje Merb přes plugin merb-parts také tzv. part controllers, tedy kontrolery určené pro práci
tag cloud
Zachytávání výjimek
V Merbu je definován kontroler Exceptions, který je volán automaticky vždy, když je vyvolána výjimka NotFound, NotAcceptable nebo podobné. To umožňuje jednoduchou tvorbu vlastních chybových hlášení při zachování vzoru MVC.
Pluginy
Všechny merbové pluginy jsou klasické gemy, které je možno nainstalovat do složky gems v rootu aplikace. Výhoda této tzv. zabundlované aplikace je ta, že ať ji nasadíte kdekoliv, stačí ji pouze Ruby a RubyGems, vše ostatní načte ze své lokální složky gems.
V Merbu není problém napsat si také vlastní generátory. Ty mohou generovat jak celou merbovou aplikaci, tak její konkrétní části jako jsou modely nebo kontrolery.
Zásadní rozdíl je také v samotném kódu frameworku. Kód Merbu je velmi přehledný, dobře dokumentovaný a je v něm použito minimum „magie“ jako jsou například method_missing, define_method, eval a další, kterými se to v Rails jen hemží. Kód Merbu je tím mnohem přístupnější pro vývojáře pluginů i pro potenciální kontributory.
Slices
Zajímavou částí Merbu jsou tzv. slices, části aplikace, které lze přimountovat na určitou URL stejně jako to umí například framework Django. Příkladem slice je merb-auth, což je velmi dobře napsaný autentikační plugin, podporující mimo jiné i OpenID.
Odkazy
Reference
- ↑ HANSSON, David Heinemeier. Merb gets merged into Rails 3! [online]. 23 Dec 2008 [cit. 2020-07-18]. Dostupné online. Je zde použita šablona
{{Cite web}}
označená jako k „pouze dočasnému použití“.
- ↑ KATZ, Yehuda. Rails and Merb Merge [online]. 23 Dec 2008. Dostupné online. Je zde použita šablona
{{Cite web}}
označená jako k „pouze dočasnému použití“.
Externí odkazy