我需要创建一个接受数据源类型(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()添加到该列表?
PS:我只需要阅读,而不是写作。
答案 0 :(得分:1)
是的,你走在正确的轨道上。接口是一种规范,允许您使用“未知”类,为您提供所需的服务,而不必依赖于您正在使用的服务(在本例中为哪种数据库类型)。
在您拥有的代码中,您将继续使用以下内容构建您的界面:
interface IConnectable {
IConnection Connect();
}
interface IConnection {
IResultSet ExecuteQuery(string query);
}
然后用具体的类实现它们。此外,您需要一个工厂来创建您需要的任何课程:
class ConnectionFactory {
IConnecable CreateConnection(...);
}
这样您就不必知道要创建哪个连接。
.NET框架中已经存在一些帮助。有一个类DbConnection,其子类如SqlConnection可能会有所帮助。还有一些框架可以帮助你连接(创建类并将它们关联在一起),但这是一个更高级的主题,可能需要稍后尝试 - 从创建自己的接口和实现开始 - 这将更容易理解
好的想法!祝你好运!P.S。为了能够轻松地重新配置您的软件以创建实现相同接口的不同对象(这通常是您想要的灵活性),您不希望直接使用构造函数创建对象,而是创建对象的中心位置。那个地方通常被称为工厂(它创造了对象......)。工厂可以非常简单(可能只是查看配置字符串或命令行参数或控制您的行为),或者更复杂的规则规定在不同情况下应该使用哪些类。
有框架为不同的情况提供不同种类的工厂,结构图link是一个,MEF(包含在.NET 4中,可在link获得)是另一个。但是不要从那开始,它会给你太多的思考一次 - 你可以稍后添加,因为你开始使用接口!