最近一段时间一直在看Community Server, 从中抄了不少宝到项目里去。
场景: 业务实体由多个不同数据库提供,或是为了方便代码移植到不同数据库上去
借鉴方法: 在CS中采取了从配置文件读取映射类的方法,可以非常灵活的定义数据源。
举例步骤: 1 定义数据实体类User
public class User:IPeople
{
private int _settingID;
private string _userID;
private string _userName;
private string _time;
private string _language;
属性:
}
2 定义多个映射类,对应不同数据库
public interface IUserProvider
{
IPeople GetUserByID(int ID);
IPeople GetNameByID(int ID);
IPeople GetUserByName(string name);
.....
}
public class UserProviderBySQL:DBHelper,IUserProvider
{
.......
}
public class UserProviderByOracle:DBHelper,IUserProvider
{
.......
}
3 在配置文档里填入类名
<?xml version="1.0" encoding="utf-8" ?>
<root>
<add name="UserAppDAL" type="AppDAL.UserProviderBySQL"></add>
</root>
4 读配置文档然后通过反射来提供业务实体
public class ConfigManager
{

..
public static object GetObjectByName(string name)
{
XmlDocument d = new XmlDocument();
d.Load(filename);
foreach (XmlNode n in d.SelectSingleNode("root").ChildNodes)
{
if (n.Attributes["name"].Value == name)
{
typeStr = n.Attributes["type"].Value;
}
}
if(typeStr == "")
{
throw new TestException("没有找到你要调用的类");
}
Type controlType = Type.GetType(typeStr,true); //由反射得到类型
object obj = Activator.CreateInstance(controlType);
return obj;
}



}
5 客户端调用
public class Users
{



.
public static AppDAL.IPeople GetUserByName(string name)
{
AppDAL.IPeople _user = null;
cacheName = "nameKey_"+name;
_user = ExtendedCache.Get(cacheName) as AppDAL.IPeople; //先查缓存
if(_user == null)
{
//由配置文件得到映射类
IUserProvider _userProvider =
ConfigManagerDAL.GetObjectByName ("UserAppDAL") as IUserProvider;
_user = _userProvider.GetUserByName(name);
ExtendedCache.Insert(cacheName, _user);
}
return _user;
}

..
}

6 移植扩展
只需要改变配置文件中的type值即可更换映射类如
<add name="UserAppDAL" type="AppDAL.UserProviderByOracle"></add>
可以轻松实现扩展和移植

浙公网安备 33010602011771号