metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-02-10 08:28 am

Бизнес-логика в хранимых процедурах

Я вот думаю: следует ли избавляться от сабжевых процедур, заменяя их на закат солнца вручную в виде кода на обычных языках программирования?
У меня 99% разнообразных отчетов реализовано на Firebird или в виде sql-запросов на пару страниц или в виде selectable хранимых процедур, тоже на пару страниц.
Все бы это хорошо, но деплоймент этого дела огорчает, язык хранимых процедур - более чем полная убогость, т.е. уровня типа "турбо-паскаль интегрированный с sql".
И главное ж, хрен чем заменишь - все остальное закат солнца вручную. В обычном случае - адовы ORM типа Entity Framework и LINQ поверх них. В условно нормальном - руби и ActiveRecord, с метапрограммированием, но у него адаптер к Firebird, по моему, несуществующий. Возможно, питон еще, у него тоже метапрограммирование имеется и kinterbasedb вроде живой.
Т.е. если по хорошему - то нужно что-то вроде LINQ, но чтобы схему БД видел сам, без импорта схемы в 100500 файлов.

PS: не успел дописать: Одна из нездоровых идей - написать транслятор из гуманного DSL с функциональщиной и школьницами с Ph.D. in CS в язык хранимых процедур.

[identity profile] stdray.livejournal.com 2012-02-10 08:09 am (UTC)(link)
>нужно что-то вроде LINQ, но чтобы схему БД видел сам, без импорта схемы в 100500 файлов

В F# 3.0 пилят такие-то Type Providers. Оно сырое, но я смотрел, контексты для Linq2Sql и Entity генерирует на лету.
Edited 2012-02-10 08:10 (UTC)

[identity profile] metaclass.livejournal.com 2012-02-10 09:07 am (UTC)(link)
А, да-да, точно. Это может, кстати, серьезно спасти мозг.

[identity profile] sorhed.livejournal.com 2012-02-10 10:17 am (UTC)(link)
Жду аки соловей лета. Type providers должны быть везде, ящетаю.

[identity profile] stdray.livejournal.com 2012-02-10 12:39 pm (UTC)(link)
Может быть опасно иметь в дело с такой динамичной штукой, по-моему. Сейчас просто стараюсь не трогать руками dbml или edmx, что генерируют десигнеры, при серьезной потребности через partial классы добавляю филды в контекст или в модельки. Изменилась база, потом все развалилось, заставил дезигнер сгененировать все заново и продолжаем работать. Как живется с этими провайдерами пока неясно.