Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Правильный подход


Автор: v00d00 28.10.2010, 13:24
Я новичок в сфере серьезной разработки бизнес приложений.

Сейчас нахожусь на таком этапе своего развития, когда не хватает опыта для самостоятельного принятия решений, но шаблонный подход и боязнь написания очередного велосипеда не дают быстро и уверенно писать эффективный код.

Поделитесь своим опытом эффективной организации доступа к данным из РБД, в приложениях на .NET Framework.

Существует огромное множество различных библиотек, которые позволяют завернуть кортежи в объекты, помимо встроенного генератора в вижуал студии. Совсем недавно узнал о существовании Microsoft Enterprise Libriairy 5.0, про шаблон ActiveRecord, про Data Domain Development и сейчас нахожусь в состоянии не способности принять решение... Посмотрел как реализован доступ к базе в GOF Patterns in Action 3.5 - тот еще велосипед.

Какие библиотеки и методики используются при разработке современных бизнесс приложений у вас на практике?
Как вы работаете с БД?
Можно ли использовать классы которые генерирует студия для работы с другой базой?
Как эффективно использовать автоматически сгенерированные датасеты?
Используете ли вы синглтон с открытым и заполненным датасетом (аля делфи стайл)?

P.S.

У меня давно созрел этот вопрос, все руки не доходили его запостить, на самом деле буду рад любому совету который имеет отношение к разработке доступа к БД.......

Автор: CYBERDREAM 28.10.2010, 15:00
Приветствую. Как вариант можешь глянуть в сторону http://ru.wikipedia.org/wiki/NHibernate

Автор: v00d00 28.10.2010, 15:18
Решений много, и если я правильно понял, то все ORM системы позволяют менять СУБД изменением конфига.

В чем профит тогда от использования EntLib.DataAccess. Хотя... Там же тоже есть возможность спроецировать кортеж в объект, причем довольно гибкая, если я правильно помню, через юнити там можно очень красиво это все завернуть в свои классы, хотя пугали необходимостью написания своих мапперов для баз не поддерживающих чето-чето( забыл лол).

Если есть минутка, опишите процесс организации доступа к БД который используете вы CYBERDREAM при производстве реальных проектов, бывали ли ситуации, когда приходится прикручивать свои костыли. Как обстоят дела с валидацией на стороне клиента в NHibernate?

Автор: CYBERDREAM 28.10.2010, 15:24
Ответить не смогу сейчас, т.к. практического опыта нет. Вот со след. недели переводят в др. отдел, там и буду познавать все вкусности и не вкуснисти хибернэйт

Автор: v00d00 29.10.2010, 16:55
Как-то тихо тут. Тогда я расскажу как сделал я.

Есть несколько проектов в солюшене, которые работают с базой данных, для каждого проекта создал датасет.
На форме-клиенте создается экземпляр датасета и набор тейбл адаптеров, которые при открытии формы загружают данные в таблицы датасета.

Со временем датасет начинает разбухать, приходится делить его на несколько частей и тд. и тп. На формах соответственно растет кол-во адаптеров и проект начинает вонять.

Что я сделал не так?

Прочел цикл статей Idsa по ORM. Все довольно симпатично выглядит. А каково применение этих шаблонов из Entity Framework на практике?


Автор: jonie 30.10.2010, 21:41
ORM не панацея... маппинг зачастую не упрощает жизнь. Например поддержка актуальной информации в кеше (в вашем случае в датасете) уже большая проблема (а в случае длинных транзакций вообще беда)...
Разбейте ваше решение на проекты:
p.data - POCO \  DTO для ваших данных
p.data.db - собственно тут используйте всякие вкусности вроде ORM-ов, вкупе с автомаппером\emitMapper под маппинг
p.data.config - для конфигурации (просто для удобства).

тогда вы не думаю что запутаетесь....

Сейчас майкрофот активно заналась перетягиванием людей на EF-ок, говоря нам вкусные вещи вроде "code first".. я лично сторонник этого метода, но пока не заметил сильно удобных вещей в конкретно этом направлении... может и допилят еще..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)