Всем более-менее опытным программистам, работавшим с энтерпрайзом, четко известен следующий эмпирический закон:
Девятое Правило Гринспуна, о котором он сознательно предпочел умолчать
Любая более-менее крупная программа на Java или C# является программой на XML
Вобщем, в один прекрасный день, работая на C#, я написал на XML-конфиг некоторых приблуд для UI. Это смотрелось настолько элегантно и красиво, и кастомизировалось настолько проще, по сравнению с обычным хардкодом, что я долго лелеял идею о том чтобы воткнуть подобное еще куда-либо в проект.
Не так давно, такой шанс появился, и я перевел в декларативное описание на XML воркфлоу основных бизнес-процессов системы.
Получилось опять же крайне неплохо, но потом я посидел и подумал.
А что если эти два конфига объединить в один XML?
Ой, стойте, но тогда ведь получается, что туда же можно перенести и разнообразные простые валидаторы и предикаты действий по бизнес-логике? Описание геттеров/сеттеров и простой арифметики - не такое уж сложное занятие, тем более проект и так в System.Reflection по уши.
Черт! Но вообще-то ведь и сложные тоже не проблема - ведь они явлются в 99% случаев не более чем SQL/HQL-запросами, которые никто не мешает хранить в конфигах.
Ух, а ведь если подумать еще - то туда же можно перенести и сами действия по бизнес-логике, не так ли?
Но ведь можно пойти и дальше. Из XML можно вообще-то говоря даже и генерировать модель данных для всей логики системы! И ведь это не просто бредовая идея - такое отчасти давно уже делается стандартными средствами .Net-платформы, например тем же Entity Framework.
И тут я задался вопросом - а зачем нам тогда вообще большая часть кода на C#? Сторонние библиотеки мы ведь точно так же можем вызывать из интерпретатора XML.
Вон оно как все отлично то выходит.
Хм, правда что-то эта модель несколько, скажем так, раздулась.
Вот бы, конечно, написать более высокоуровневый интерпретатор XML чтобы он нам генирировал наш XML из декларативного описания другим XML?
И тут меня осенило. Где-то я это уже видел. Может быть в одной книжке, давно забытой на полке? Или в старой статье семьдесят мохнатого года?
Вспомнив окончательно, я просто расплакался.
Итак:
Вторая Теорема Лавсана
Каждый XML-программист (то есть любой продвинутый java/c#-программист) в конечном итоге доходит до лиспа, просветляется и плачет.
Дискач.