Я пытаюсь решить, какой из двух шаблонов фабрики я должен использовать в своих приложениях 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
.
Каковы плюсы и минусы каждой реализации?
высоко ценится