Вопрос по oop, .net, database, design-patterns – Шаблоны проектирования уровня доступа к данным

13

Мне нужно спроектировать уровень доступа к данным с помощью .NET, который, вероятно, будет использовать более одной системы управления базами данных (Mysql и Sql Server) с одинаковым реляционным дизайном.

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

Спасибо.

Ваш Ответ

7   ответов
2

выписыватьсяLLBLGen. Используя модель адаптера, вы можете переключаться между поставщиками данных, используя одни и те же бизнес-объекты. Он может генерировать код для MySql и Sql Server.

AFAIK ADO.NEt не будет, например, разбирать различия между pl / SQL и TSQL. Хороший ORM обеспечит абстракцию и сделает часть SQL для вас.
@Bob: ORM хорош, но его вопрос не требует; только для переключения баз данных. Любая из технологий ADO.NET сделает это для него.
1

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

Существует несколько инструментов ORM, которые могут выполнять свою работу, все работают по-разному и зависят на ваш бюджет, размер вашей команды и т. д. Они могут либо работать, создавая класс отображения, такой как NHibernate, либо работать через отражение, то есть разметку атрибута.

Бесплатно, т. Е. С открытым исходным кодом, если вам нравится, NHibernate идеален. Я использую это в данный момент, чтобы создать слой DAL для продукта большой компании. Это отлично, но потребуется время, чтобы освоить. С помощью NHibernate вы определяете классы отображения, которые при выполнении генерируют модель БД для вас. Он поддерживает хранимые процедуры. Недостатком является то, что для обучения требуется некоторое время, особенно для правильного отображения сложных данных. Это отлично. У него огромный набор примеров и других проектов, которые используют его. Проверьте Koders.com.

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

Если некоторые данные уже доступны, то TierDeveloper - идеальный вариант. Это по существу бесплатно, и работает, разрабатывая набор классов из вашей модели базы данных. Единственный недостаток - картограф для mysql - сторонний. Это продукт класса enteprise, который был сделан бесплатным для поддержки ncache, и его возможный подход.

Если вы отчаянно хотите придерживаться MS, они переходят на ORM и имеют продукт ADO.NET Entity Framework. Функционально это не так полно, как инструменты, определенные выше. Около 3 поколений отстают в зрелости. Его доступно в версии 2008 года SP1. Разъем для MySQL будет стоить.

Также вы можете использовать LINQ. Он также будет нацелен на mysql, если вам также понадобится соединитель.

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

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

2

Шаблоны корпоративной архитектуры приложений.

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

Вы можете использовать контейнер для инъекций зависимости илисделать это вручную.

Что касается технологии, я бы порекомендовал MicrosoftEntity Frameworkпоскольку ваш доступ к данным, по-видимому, ограничен реляционными базами данных. Платформа Entity Framework является официальным OR / M от Microsoft и имеет поставщиков для множества различных РСУБД, а также поддержку LINQ.

8

тавщик БД для Ado.net реализует базовые интерфейсы, и при их использовании ваш код может выглядеть следующим образом:

public static IDbConnection GetConnection(string connectionName)
{
  ConnectionStringSettings ConnectString = ConfigurationManager.ConnectionStrings[connectionName];
  DbProviderFactory Factory = DbProviderFactories.GetFactory(ConnectString.ProviderName);
  IDbConnection Connection = Factory.CreateConnection();
  Connection.ConnectionString = ConnectString.ConnectionString;
  return Connection;
}

Затем, когда вам нужно общаться с БД:

public static DataTable Dummy()
{
  using (IDbConnection Connection = GetConnection("SiteSqlServer"))
  {
    IDbCommand Command = Connection.CreateCommand();
    Command.CommandText = "DummyCommand";
    Command.CommandType = CommandType.StoredProcedure;

    Connection.Open();

    using (IDataReader reader = Command.ExecuteReader())
    {
      DataTable Result = new DataTable();
      Result.Load(reader);
      return Result;
    }
  }
}

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

0

ADO.NET быть очень полезным для этого. В нем есть все функции, необходимые для создания слоя доступа к данным независимо от используемой базы данных.

12

аулера.

Список моделей также на егоВеб-сайт

DataMapper картина тоже актуальна.

В настоящее время я читаю эту книгу, и я могу искренне рекомендовать ее! это просто здорово! +1
0

NHibernate предназначен для обработки такого рода сценария, если вы готовы изучить его

Стандартный класс DataSet также обрабатывает такие сценарии, не так ли?
да, вы правы, но NHibernate предоставляет вам более высокий уровень абстракции (например, вы больше не пишете SQL, а используете встроенный язык запросов NHibernate int или LINC, когда он становится доступным) и упрощает перенос вашей модели данных на другой движок базы данных.

Похожие вопросы