Создать простой только для чтения DAL? - PullRequest
1 голос
/ 09 июня 2010

Я искал простое решение для этого, стараясь изо всех сил склоняться к чему-то вроде NHibernate, но пока все, что я нашел, похоже, пытается решить немного другую проблему.Вот что я рассматриваю в своем текущем проекте:

У нас есть база данных IBM iSeries в качестве основного хранилища для стороннего программного пакета, используемого для нашего основного бизнеса (финансового учреждения).Часть того, что делает моя команда, - это написание приложений, которые каким-то образом отчитываются или отключают многие из этих данных.В прошлом мы вручную создавали соединения ADO .NET (кстати, мы используем .NET 3.5 и Visual Studio 2008) и вручную писали запросы и т. Д.

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

var something = (from t in TableName select t);

И, в идеале, они просто получили бы некоторый IQueryable или IEnumerableсгенерированных объектов.Это будет сделано в новом доменном ядре, которое я создаю, где будут жить эти объекты, и приложения будут взаимодействовать с ним через уровень обслуживания запросов / ответов.

Несколько вещей, на которые следует обратить внимание:

  1. Объекты, которые соответствуют таблицам базы данных, должны быть сгенерированы один раз, и мы бы предпочли, чтобы они обновлялись вручную с течением времени.То есть, если столбцы / таблицы добавляются в базу данных, нам не нужно ничего делать.(Если некоторые будут удалены, конечно, он сломается, но это нормально.) Но если нам нужно использовать новый столбец, мы должны иметь возможность просто добавить его в необходимый класс (ы) без необходимости повторного генерированиявсе это.
  2. Все это должно быть только для SELECT.Мы не делаем полный DAL здесь, потому что мы не хотим иметь возможность что-либо сломать в базе данных (даже случайно).
  3. Нам не нужно никакого отображения между нашими объектами домена исгенерированные типы объектов.Домен едва покрывает часть данных, которые там находятся, большая часть которых нам никогда не понадобится, и мы бы просто со временем создавали карты многократного использования вручную.У меня уже есть логическое разделение для DAL, где мои классы «хранилища» возвращают доменные объекты, я просто ищу лучшую альтернативу ручному ADO для использования внутри классов хранилища.

Любые предложения?Кажется, что то, что я делаю, достаточно вне обычного спроса на инструменты / учебные пособия по DAL / ORM, так что я не смог ничего найти.Или, может быть, я просто упускаю из виду что-то очевидное?

Ответы [ 2 ]

1 голос
/ 09 июня 2010

Возможно, вы захотите изучить это:

http://www.codesmithtools.com/

Я участвовал в нескольких проектах, где использовался этот инструмент, и разработчики его любили.

Предупреждение: это не бесплатная программа.

0 голосов
/ 09 июня 2010

Добавление к ответу code4life.

Недавно я использовал CodeSmith 2.6 в домашнем проекте для домашних животных.
Я адаптировал шаблоны для генерации частичных классов с частичными методами CRUD.
Затем я расширил частичные классы и частичные методы, чтобы обеспечить базовое отображение, например когда читается «Order», читайте связанные «OrderLines» и т. д.

Подобный подход может работать для вас, и будет проще, потому что на самом деле вам нужен только R CRUD:)

Надеюсь, это поможет.

P.S. Мне нужно переключиться с CS 2.6 на что-то другое (возможно, MyGeneration), так как 2.6 зависит от .Net 1.1, что является проблемой, когда я перехожу на машину для разработки 64.

UPDATE

Я слышу тебя.
Приятно тыкайте приятеля MyGeneration, мы используем CodeSmith здесь, в работе, поэтому я пошел на 2.6 дома (я бросил быстрый взгляд на MyGeneration, не получил его сразу - что было больше времени, чем я должен был дать это - так переключился обратно на CS).

MyGeneration - это в основном версия CS с открытым исходным кодом.

Кроме того, почему бы не заставить его генерировать код ВСЕГДА - вы можете настроить содержание с помощью Частичных классов и Частичных методов, я знаю, вы думаете, повторное создание излишне, но опыт подсказывает, одна из тех вещей, что, если у вас ее нет, она вам понадобится, а если она у вас есть и нужна, вы никогда ее не заметите.

...