Читая крокодила
Jul. 28th, 2010 10:54 amЧто-то чем дальше я копаюсь с кодогенерацией и метапрограммированием, тем больше мне кажется обоснованной точка зрения
plumqqz насчет ООП как мозгового слизня.
Т.е. вообще я изучаю аспект, нельзя ли упростить работу с ORM, вынеся всю логику по обработке маппингов на этап компиляции программы, чтобы в готовой программе был сгенерированный код по работе с БД. Кроме того, мне нужна возможность в некоторых местах использовать вместо БД текстовые файлы, т.к. я хочу хранить некоторые части данных под системой контроля версий.
И вот как только я пытаюсь выйти за пределы реляционной модели и оберток для SQL, т.е. прикрутить какую-нибудь объектность, вложенные коллекции, графы и прочее - начинается теоретический ад, что с маппингами в БД, что с сериализацией в текст.
Реляционная модель явно отраженная на структуру программы (т.е. все объекты которые там есть - POCO с полями-значениями, никаких коллекций и ссылок) +некоторое количество осмысленного сгенеренного кода вроде "FindByPrimaryKey" и методов-оберток вокруг CRUD-операций, выглядит намного гуманнее, чем заворачивание всего в объекты с вложенными коллекциями, ленивыми-неленивыми ссылками, всякими one-to-many и наоборот отношениями.
В тех местах, где действительно нужно работать сразу с записью и ее подчиненными - проще по информации о внешних ключах сгенерить обертку типа "SelectChildren" и вызывать ее руками, нежели пропускать это через десять слоев генерящихся на ходу проксей и виртуальных методов, типа как в NHibernate.
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Т.е. вообще я изучаю аспект, нельзя ли упростить работу с ORM, вынеся всю логику по обработке маппингов на этап компиляции программы, чтобы в готовой программе был сгенерированный код по работе с БД. Кроме того, мне нужна возможность в некоторых местах использовать вместо БД текстовые файлы, т.к. я хочу хранить некоторые части данных под системой контроля версий.
И вот как только я пытаюсь выйти за пределы реляционной модели и оберток для SQL, т.е. прикрутить какую-нибудь объектность, вложенные коллекции, графы и прочее - начинается теоретический ад, что с маппингами в БД, что с сериализацией в текст.
Реляционная модель явно отраженная на структуру программы (т.е. все объекты которые там есть - POCO с полями-значениями, никаких коллекций и ссылок) +некоторое количество осмысленного сгенеренного кода вроде "FindByPrimaryKey" и методов-оберток вокруг CRUD-операций, выглядит намного гуманнее, чем заворачивание всего в объекты с вложенными коллекциями, ленивыми-неленивыми ссылками, всякими one-to-many и наоборот отношениями.
В тех местах, где действительно нужно работать сразу с записью и ее подчиненными - проще по информации о внешних ключах сгенерить обертку типа "SelectChildren" и вызывать ее руками, нежели пропускать это через десять слоев генерящихся на ходу проксей и виртуальных методов, типа как в NHibernate.