Какова лучшая практика: создать только один статический класс (Singleton), который обеспечивает все необходимое соединение с базой данных, или создать один объект на экземпляр DAO?Обратите внимание, что мой проект имеет доступ к нескольким базам данных одновременно, поэтому я создал класс AcessoBanco
, который получает файл конфигурации .INI и возвращает мне все необходимые мне соединения.Я использовал подход с использованием одного статического класса, но получал отдельные исключения относительно параллелизма, потому что система выполняет несколько многопоточных задач.Я решил это, создав блокировки в классе AcessoBanco
, но это действительно хорошая идея?Может быть, если я поставлю один экземпляр AcessoBanco
на каждый объект dao, проблема параллелизма может быть решена более элегантно, я прав?Некоторые примеры:
Использование одноэлементного подхода
public class Repository1
{
public Repository1(string iniFilePath)
{
AcessoBanco.Configure(iniFilePath); // Singleton that creates all the connections (concurrency excepction solved using locks)
// After configured, just call AcessoBanco.GetConnections() in any point of the code to get the connections
}
}
Использование одного экземпляра на объект
public class Repository2
{
public AcessoBanco Conexoes { get; set; }
public Repository2(string iniFilePath)
{
Conexoes = new AcessoBanco(iniFilePath); // Using one instance of AcessoBanco in each DAO. I will need to do it in every DAO.
}
}