Для обеспечения независимости внешних систем (например, базы данных), вы захотите архитектовать свое решение, чтобы говорить только с интерфейсом. Затем вы можете использовать несколько методов, включая инъекцию зависимостей, чтобы решить, какую реализацию использовать во время выполнения.
Чтобы упростить здесь, позвольте нам просто использовать завод.
Прежде всего, нужно решить, что должна делать ваша база данных. Простой пример - мы будем хранить или извлекать целое число. Итак, сначала давайте определим этот интерфейс. Я просто оставляю асинхронные вещи для простоты, но вы действительно этого хотите, когда разговариваете с БД.
public interface IDatabase{
void Store(int value);
int Get();
}
Итак, теперь у нас есть что-то, что наш код вызова может использовать для обозначения ЛЮБОГО типа базы данных.
Далее нам понадобятся различные типы классов для каждого DB
public class SqlServerDB : IDatabase{
public void Store(int value){//store it}
public void Get(){//get it}
}
public class MySqlDB : IDatabase{
public void Store(int value){//store it}
public void Get(){//get it}
}
Опять же, вы не хотите, чтобы вызывающий код, чтобы узнать о реализации, так что вы не можете создать экземпляр объекта с только новым , Вместо этого вам нужно будет создать класс, который знает о различных типах баз данных.
Я использую строку здесь, но вы должны использовать перечисление в реальном коде.
public static class DatabaseFactory{
public static IDatabase GetDatabase(string dbName){
switch(dbName){
case "sqlserver":
return new SqlServerDB();
case "mysql":
return new MySqlDB();
default:
throw new ArgumentException("Don't know about that DB");
}
}
}
Теперь ваш код вызова не должен изменяться с помощью БД. Если у вас есть объект конфигурации (например, встроенный в .NET), вы можете легко изменить используемую базу данных.
IDatabase myDB = DatabaseFactory.GetDatabase(Config.DBName);
myDB.Store(191);
int result = myDB.Get();
//result will equal 191!
Посмотрите на MVC, тогда есть разделение проблем. –
MVC был бы хорошим выбором, но если вы хотите придерживаться Asp.net, вы можете использовать Microsoft Enterprise Library, которая имеет общие функции db, такие как DBCommand, DBReader, DBAdapter и т. Д., Просто передайте правильную базу данных и используйте эту общую библиотеку.Я использовал это в моем проекте, у которого были как SQL, так и Oracle DB. – Sushil
Вы также захотите избежать прямого использования запросов к базе данных в своем приложении. Вы должны использовать хранимые процедуры, чтобы имена и параметры процедуры, переданные из приложения, были одинаковыми независимо от используемой базы данных. – Tim