Posted by: Ivko | December 27, 2009

Избор на седмицата – 52/2009

Проект на седмицата

Тази седмица ми попадна Impala. Според автора на проекта това с две думи е едно по-леко OSGi. Демек без да ви се налага да пишете bundle-и и пр. и с добавянето на един jar във вашето приложение си имате модулирана програма. Абсолютно без да се притеснявате може да подменяте отделните модулчета като няма да ви се налага да прекомпилирате и тествате отново всичко останало.

Естествено, Impala е доста полезна, ако вашето приложение е вече базирано на Spring. В противен случай ще трябва да си направите така или иначе контекстите, с чиято помощ Impala ще модулира вашата програма.

Предимството на Impala пред OSGi е, че не трябва за най-простия integration тест да създавате bundle.

За повече подробности, вижте интевюто в dzone.

Configuration simplification in Spring 3.0

С излизането на официалната версия 3.0 на Spring framework зачестиха статиите (основно на сайта blog.springsource.com), с чиято помощ можем да се запознаем с новостите в тази трета версия и как те правят живота ни на програмисти по-лесен. В горния posting може да видите как да вкарате конфигурацията на вашите bean-ове в стандартен Java клас.

Ако сте се занимавали със Spring, знаете, че неговият контейнер знае какви класове да зареди и как да ги inject-не на базата на един XML конфигурационен файл. От трета версия това може да става и в Java клас, който е анотиран с @Configuration. Самите bean-ове са конфигурирани в методи, които са анотирани от своя страна с @Bean и връщат вярната имплементация на вашия interface. Клиентският ви код зарежда bean-овете посредством класа AnnotationConfigApplicationContext (от XML най-често го зареждахме през FileSystemXmlApplicationContext или ClassPathXmlApplicationContext).

За повече подробности вижте статията, както и примерният проект, връзка до който може да намерите там. За съжаление нито в статията, нито в примера видях как може да се зареждат по-сложни неща, като data source-ове, transaction manager-и и пр. Или как да се активират различните post processor-и. Затова за още повече подробности може да видите тази секция от Spring reference документацията.

DSL Evolution

В тази статия се разказва основно за еволюцията на Domain Specific Languages (DSL).

След това кратко въведение, да започнем малко от начало. Първо, какво е Domain Specific Language. Терминът е дефиниран от Martin Fowler (същият, който измисли и терминът Dependency Injection). Под това понятие се обобщават всички [програмни] езици, които са специфични за дадена област (domain) и всъщност не могат да правят абсолютно всички неща, които се правят от General Purpose Language-ите като C и Java. Общо взето според теорията разликата между двата типа езици е, че по-общите са turing-complete (могат да смятат абсолютно всички задачи в теорията на програмиране; какво значи това е тема на една огромна статия, която в момента не мога да напиша). Но това не винаги е така.

Най-общ пример за domain specific language са regular expression-ите. Те дефинират описание на даден израз, неговото търсене в по-голям израз и пр., но не претендират, че могат да решат всяка задача в теорията на програмирането (като намирането на най-малко общо кратно например). Има и пример за един език, който хем е domain specific – решава една конкрета област от проблеми, хем според теорията е turing complete. Става въпрос за ant.

Като стана дума за ant, бих искал малко да задълбая в обяснението що е то DSL, за да могат един-двама от седемте ми читатели да ме разберат напълно. Има една голяма корпорация, която поради legal issues не разрешава продуктите й да излизат на пазара пакетирайки и използвайки ant. Затова преди 4-5 години един екип измисли т.нар. Configuration framework, за да може да ползва малка част от възможностите на ant с абсолютно същия XML синтаксис. За целта обаче въпросният екип сам написа кода за интерпретация и изпълнение на въпросния XML. Е, това е абсолютно чист DSL.🙂

Тааааа, да си дойдем на статията. Авторът разказва, че основният проблем на DSL-ите е, че един ден ни се налага да ги разширим по някакъв начин, за да поддържат поредното изискване от клиентите или domain експертите. И се опитва да ни покаже как да стане това, така че новият ни parser да може да разпознава и текст писан на старата версия на езика. Малко ми се видя по-теоретична, но пък постановките там са валидни.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Categories

%d bloggers like this: