C# 为多个源类型创建数据访问类

C# 为多个源类型创建数据访问类,c#,class-design,generics,C#,Class Design,Generics,我需要创建一个类,该类将接受数据源类型(MSSQL、Oracle、Access、Excel、ActiveDirectory、CSV文件、Sharepoint等)、该类型的连接详细信息,并返回到该数据源的连接。 之后,我需要能够查询数据源并返回可用字段,最后能够从任何字段提取数据 我认为这听起来像是一个接口的工作,因为数据源类型的列表会随着时间的推移而增加,但我从未使用过接口 这样行吗 interface IConnectable { void Connect(); } class So

我需要创建一个类,该类将接受数据源类型(MSSQL、Oracle、Access、Excel、ActiveDirectory、CSV文件、Sharepoint等)、该类型的连接详细信息,并返回到该数据源的连接。 之后,我需要能够查询数据源并返回可用字段,最后能够从任何字段提取数据

我认为这听起来像是一个接口的工作,因为数据源类型的列表会随着时间的推移而增加,但我从未使用过接口

这样行吗

interface IConnectable
{
    void Connect();
}

class SourceMSSQL : RDB, IConnectable{}
class SourceOracle : RDB, IConnectable{}
class SourceAccess : RDB, IConnectable{}
class SourceExcel : RDB, IConnectable{}
class SourceCSVFile: FlatFile, IConnectable{}
class SourceSharePoint: FlatFile, IConnectable{}
class SourceActiveDirectory: FlatFile, IConnectable{}
另外,如何将Read()添加到该列表中


附言:我只需要阅读,不需要写作。

是的,你的思路是对的。接口是一种规范,它允许您使用一个“未知”类,该类为您提供所需的服务,而不必绑定到您正在使用的服务(在本例中是哪种数据库类型)

在您拥有的代码中,您将继续在您的界面上构建以下内容:

interface IConnectable {
    IConnection Connect();
}

interface IConnection {
    IResultSet ExecuteQuery(string query);
}
然后用具体的类实现这些。此外,您还需要一个工厂来创建所需的任何类:

class ConnectionFactory {
    IConnecable CreateConnection(...);
}
这样,您就不必知道要创建哪个连接

在.NET framework中已经提供了一些帮助。有一个类DbConnection,其子类如SqlConnection可能会有所帮助。此外,还有一些框架可以帮助您连接(创建类并将它们关联在一起),但这是一个更高级的主题,稍后可能会尝试—从为这些类创建自己的接口和实现开始—这将更容易理解

好主意!祝你好运

另外,为了能够轻松地重新配置软件,以创建实现相同接口的不同对象(这通常是您想要的灵活性),您不希望直接使用构造函数创建对象,而是在一个中心位置创建对象。那个地方通常被称为工厂(它创建对象…)。工厂可以非常简单(可能只是查看配置字符串或命令行参数或控制您行为的任何内容),也可以更高级,因为复杂的规则规定在不同的情况下应该使用哪些类


有一些框架为不同的情况提供不同种类的工厂,structuremap是其中之一,而MEF(包含在.NET4中,可在上获得)是另一个。但不要从这个开始,它会给你太多的思考一次-你可以在以后添加,因为你是使用接口开始

是的,你在正确的轨道上。接口是一种规范,它允许您使用一个“未知”类,该类为您提供所需的服务,而不必绑定到您正在使用的服务(在本例中是哪种数据库类型)

在您拥有的代码中,您将继续在您的界面上构建以下内容:

interface IConnectable {
    IConnection Connect();
}

interface IConnection {
    IResultSet ExecuteQuery(string query);
}
然后用具体的类实现这些。此外,您还需要一个工厂来创建所需的任何类:

class ConnectionFactory {
    IConnecable CreateConnection(...);
}
这样,您就不必知道要创建哪个连接

在.NET framework中已经提供了一些帮助。有一个类DbConnection,其子类如SqlConnection可能会有所帮助。此外,还有一些框架可以帮助您连接(创建类并将它们关联在一起),但这是一个更高级的主题,稍后可能会尝试—从为这些类创建自己的接口和实现开始—这将更容易理解

好主意!祝你好运

另外,为了能够轻松地重新配置软件,以创建实现相同接口的不同对象(这通常是您想要的灵活性),您不希望直接使用构造函数创建对象,而是在一个中心位置创建对象。那个地方通常被称为工厂(它创建对象…)。工厂可以非常简单(可能只是查看配置字符串或命令行参数或控制您行为的任何内容),也可以更高级,因为复杂的规则规定在不同的情况下应该使用哪些类


有一些框架为不同的情况提供不同种类的工厂,structuremap是其中之一,而MEF(包含在.NET4中,可在上获得)是另一个。但不要从这个开始,它会给你太多的思考一次-你可以在以后添加,因为你是使用接口开始

你的问题有点让人困惑。您试图在哪里添加
read()
?如果它是所有类共享的方法,那么将它放在接口定义中。那么您的注释是否意味着接口定义中可以有多个方法?如果是,谢谢。我在看一些样本,因为它们都很简单,没有一个在iface def中定义了一个以上的方法。你的问题有点让人困惑。您试图在哪里添加
read()
?如果它是所有类共享的方法,那么将它放在接口定义中。那么您的注释是否意味着接口定义中可以有多个方法?如果是,谢谢。我在看一些样本,因为它们都很简单,没有一个在iface def中定义了一种以上的方法。谢谢!请解释“你需要一个工厂”。我不太熟悉,谢谢!请解释“你需要一个工厂”。我对此不熟悉。