Какой из двух шаблонов проектирования я должен реализовать в 3-уровневом приложении Asp.Net? - PullRequest
0 голосов
/ 22 сентября 2010

Я пытаюсь решить, какой из двух шаблонов фабрики я должен использовать в своих приложениях Asp.Net:

1: Все DAL провайдеры являются производными от одного и того же абстрактного базового класса DepartmentsProvider, который определяет открытый интерфейс класса (все необходимые методы CRUD, для которых производные классы (провайдеры) предоставляют конкретную реализацию). Слой BLL создает правильного поставщика, вызывая DepartmentsProvider.Instance:

public abstract class DepartmentsProvider
{
   static private DepartmentsProvider _instance = null;
   /// <summary>
   /// Returns an instance of the provider type specified in the config file
   /// </summary>
   static public DepartmentsProvider Instance
   {
       get
       {
           if (_instance == null)
               _instance = (DepartmentsProvider)Activator.CreateInstance(
                  Type.GetType(Settings.Departments.ProviderType));
           return _instance;
       }
   }

   public abstract List<Department> GetDepartments ();
   }
   /// Concrete provider
   public class SqlDepartmentsProvider : DepartmentsProvider
   {
       public override List<Department> GetDepartments()
       {
           using (SqlConnection cn = new SqlConnection(this.ConnectionString))
           {...}
       }
   }

2:

public class DepartmentsProvider
{
    static private DbProviderFactory _instance = null;
    /// <summary>
    /// Returns an instance of the FactoryProvider type specified in the config file
    /// </summary>
    static public DbProviderFactory Instance
    {
        get
        {
            if (_instance == null)
                _instance = (DepartmentsProvider)Activator.CreateInstance(
                   Type.GetType(Settings.Departments.ProviderType));
            return _instance;
        }
    }

    public static List<ForumDetails> GetDepartments()
    {
        DbConnection cn = Instance.CreateConnection();
        ...
    }
}

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

Каковы плюсы и минусы каждой реализации?

высоко ценится

1 Ответ

0 голосов
/ 24 сентября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...