【发布时间】:2019-06-16 11:58:49
【问题描述】:
我正在尝试设置一个可以与 SQL db 以及一些 noSQL DB 对话的数据库访问层。我正在考虑拥有一个像 IDataManager 这样的接口,它具有 GetData() putData()、addTable()、dropTable() 等通用功能,并且两个 Db 都可以具有单独的功能,例如 noSQL DB 可以允许从 XML 或平面插入数据文件等 如何在我的客户端代码中实现这种层次结构的工厂逻辑或访问逻辑?
interface IdataManager
{
getData();
putData();
addTable();
dropTable();
}
class NoSQLManager : Idatamanager
{
//implements all common functions
getData();
putData();
addTable();
dropTable();
//also declares some additional ones
putDatausingXML();
}
class SQLManager : Idatamanager
{
//implements all common functions
getData();
putData();
addTable();
dropTable();
//also declares some additional ones
putDatausinglocaltable();
}
//Now in my code to access above DAL logic , lets say I create a simple factory
class dataAccessFactory
{
IdataManager getDataManager(int id)
{
dataManager dm = null;
if(id==1)
dm = new NoSQLManager();
else if(id==2)
dm = new SQLManager();
return dm;
}
}
Logic to access above factory :
dataAccessFactory daf = new dataAccessFactory ();
IdataManager noSqlObj = daf.getDataManager(1);
noSqlObj.putDatausingXML(); //problem this wont work.
我希望能够使用 noSqlObj 访问 putDatausingXML 等额外函数以及 getData() 等常用函数
但是使用给定的继承和逻辑,我将只能访问基本接口 IdataManager 的一部分。
【问题讨论】:
标签: c# polymorphism data-access-layer factory-pattern