Ответ 1
Я рекомендую шаблоны архитектуры корпоративных приложений Мартина Фаулера.
Список шаблонов также находится на веб-сайте
Образец DataMapper также имеет значение.
Мне нужно создать слой доступа к данным с .NET, который, вероятно, будет использовать более одной системы управления базами данных (Mysql и Sql Server) с тем же реляционным дизайном.
В принципе, нужно просто переключаться с одной базы данных на другую, поэтому я бы хотел, чтобы вы рекомендовали мне некоторые веб-сайты или книги, которые были полезны для вас, с общими шаблонами проектирования или информацией в целом для реализации такого рода уровня доступа к данным.
Спасибо.
Я рекомендую шаблоны архитектуры корпоративных приложений Мартина Фаулера.
Список шаблонов также находится на веб-сайте
Образец DataMapper также имеет значение.
Мне нравится использовать интерфейс Db на основе интерфейса. Каждый поставщик db для 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;
}
Затем, когда вам нужно связаться с db:
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;
}
}
}
С помощью этой методики вы можете создать полностью независимую от Db DAL. Конечно, для некоторых сложных сценариев этого недостаточно. Но в основном это будет делать работу, и вам не нужны различные внешние библиотеки.
Самое простое решение - использовать ORM. Проверьте LLBLGen. Используя модель адаптера, вы можете переключаться между поставщиками данных при использовании одних и тех же бизнес-объектов. Он может генерировать код для MySql и Sql Server.
В общем, вторая рекомендация Джона Нолана Шаблоны архитектуры корпоративных приложений.
В частности, я бы всегда рекомендовал вам скрыть свой уровень доступа к данным за интерфейсом и использовать инъекцию зависимостей для ввода определенного компонента доступа к данным в вашу логику домена во время выполнения.
Вы можете использовать контейнер для инъекций зависимостей или сделать это вручную.
На технологической стороне я бы рекомендовал Microsoft Entity Framework, поскольку ваши потребности в доступе к данным, похоже, ограничены реляционными базами данных. Entity Framework является официальным OR/M Microsoft и имеет провайдеры для множества различных РСУБД, а также поддержку LINQ.
Это действительно зависит от размера вашего слоя и типа продукта, который вы разрабатываете. Если это достаточно хорошо, то ADO.NET, вероятно, будет идеальным. Если это более высокий уровень DAL и его разработка в многозадачных dbms, лучше всего использовать инструмент ORM. Они являются быстрыми, эффективными и зрелыми продуктами и могут быстро включить перенацеливание в другой бит, просто изменив один параметр. Написание статического ADO - это нечто, что переходит в наследие.
Существует несколько инструментов ORM, которые могут выполнять эту работу, все работают по-разному и зависят от на вашем бюджете, размере вашей команды и т.д. Они могут либо работать, когда должны писать класс сопоставления, например NHibernate, либо работать через отражение, т.е. разметку атрибутов.
Бесплатно, то есть с открытым исходным кодом, если ваш скин NHibernate идеален. Я использую это на данный момент, чтобы создать слой DAL для крупного продукта. Это превосходно, но нужно успеть освоить. С NHibernate вы определяете классы сопоставления, которые при выполнении генерируют для вас модель db. Он поддерживает хранимые процедуры. Недостатком является то, что для изучения требуется некоторое время, особенно для правильного отображения сложных данных. Отлично. У этого есть огромный набор образцов и других проектов, плавающих вокруг того, которые использовали его. Проверьте Koders.com.
Если у вас есть бюджет, то LLBLGen идеален. Он строго типизирован, а также поддерживает хранимые процедуры.
Если модель уже доступна, то TierDeveloper идеален. Он по сути свободен и работает, развивая набор классов из вашей модели базы данных. Единственным недостатком является то, что mapper для mysql является сторонним. Это продукт класса enteprise, который был свободен для поддержки ncache и его возможного подхода.
Если вы отчаянно пытаетесь придерживаться MS, они двигаются к ORM и имеют продукт под названием ADO.NET Entity Framework. Функционально это не так полно, как инструменты, описанные выше. Его три поколения покоятся в зрелости. Его доступно в сравнении с версией sp1. Соединитель для mysql будет стоить.
Кроме того, вы можете использовать LINQ. Он также будет нацелен на mysql, если вам также понадобится соединитель.
В идеале, ваш лучший выбор - с ORM. Если вы не можете поддерживать открытый исходный код и иметь бюджет, то получим
Надеюсь, что это поможет.
Я нашел ADO.NET, чтобы быть очень полезен для этого. Он имеет все функции, необходимые для создания уровня доступа к данным независимо от используемой вами базы данных.
NHibernate предназначен для обработки такого сценария, если вы хотите его изучить