我编写了一个用于访问数据库的 DLL。因此,我有一个名为IDbInterop的接口,如下所示:
public interface IDbInterop
{
void ExecuteCommandNonQuery(string commandText, params IDbParameter[] commandParameter);
object ExecuteCommandScalar(string commandText, params IDbParameter[] commandParameter);
DataSet ExecuteCommandDataSet(string commandText, params IDbParameter[] commandParameter);
}
为了为特定的数据库提供程序获取此接口的实例,我引入了一个工厂,它以枚举作为参数来决定应该创建哪个具体实现:
public static class DbInteropFactory
{
public static IDbInterop BuildDbInterop(DbType dbType, string connectionString)
{
switch (dbType)
{
case DbType.MSSQL:
return new MSSQLDbInterop(connectionString);
default:
throw new ArgumentOutOfRangeException("dbType");
}
}
}
public enum DbType
{
MSSQL,
}
到目前为止,我只为 MSSQL 数据库实现了一个具体的实现。现在,如果应该添加另一个数据库提供程序,我将不得不执行以下步骤:
- 为具体实现创建一个类(例如 MySqlDbInterop)
- 扩展枚举(例如 MYSQL)
- 扩展工厂以允许用户获得新的实现
有没有一种方法,如果添加了新的实现,我不必扩展枚举和工厂?