是否每个一个类工厂接口创建都需要一个单独文件类?

3 views
Skip to first unread message

天道酬勤

unread,
Mar 31, 2006, 10:08:33 PM3/31/06
to 动软.Net代码自动生成器
关于许多网友提出是否每个一个类工厂接口创建都需要一个单独文件类。
原来是每个类接口反射都放在一个单独文件(类)里,这样在工厂项目里就会有很多类。

这里解释一下,并不是每一个工厂接口创建都必须单独放在一个文件里,完全可以把所有的接口创建放在一个类里,如:
在工厂里创建一个DataAccess抽象类,把所有类的接口创建放在这一个类里就可以:

namespace LiTianPing.DALFactory
{
/// <summary>
/// Abstract Factory pattern to create the DAL。
/// </summary>
public sealed class DataAccess
{
private static readonly string path =
System.Configuration.ConfigurationSettings.AppSettings["DAL"];
public DataAccess()
{ }

#region CreateObject //使用缓存
public static object CreateObject(string path,string CacheKey)
{
object objType = DataCache.GetCache(CacheKey);
if (objType == null)
{
try
{
objType = Assembly.Load(path).CreateInstance(CacheKey);
DataCache.SetCache(CacheKey, objType);// 写入缓存
}
catch//(System.Exception ex)
{
//string str=ex.Message;// 记录错误日志
}
}
return objType;
}
#endregion

#region CreateSysManage 接口
public static DvsLicence.IDAL.ISysManage CreateSysManage()
{
//方式1
//return
(DvsLicence.IDAL.ISysManage)Assembly.Load(path).CreateInstance(path+".SysManage");

//方式2
string CacheKey = path+".SysManage";
object objType=CreateObject(path,CacheKey);
return (ISysManage)objType;
}
#endregion

#region CreateAdIP 接口
public static DvsLicence.IDAL.ADManage.IAdIP CreateAdIP()
{
string CacheKey = path+".ADManage.AdIP";
object objType=CreateObject(path,CacheKey);
return (IAdIP)objType;
}
#endregion

#region CreateAdSupplier
public static DvsLicence.IDAL.ADManage.IAdSupplier
CreateAdSupplier()
{
string CacheKey = path+".ADManage.AdSupplier";
object objType=CreateObject(path,CacheKey);
return (IAdSupplier)objType;
}
#endregion

然后,在业务层BLL里这样调用:

namespace LiTianPing.BLL
{
/// <summary>
/// SysManage 的摘要说明。
/// </summary>
public class SysManage
{
private static readonly ISysManage dal =
DataAccess.CreateSysManage();

public SysManage()
{
}

public int AddTreeNode(SysNode node)
{
return dal.AddTreeNode(node);
}
public void UpdateNode(SysNode node)
{
dal.UpdateNode(node);
}
public void DelTreeNode(int nodeid)
{
dal.DelTreeNode(nodeid);
}

public DataSet GetTreeList(string strWhere)
{
return dal.GetTreeList(strWhere);
}

public SysNode GetNode(int NodeID)
{
return dal.GetNode(NodeID);
}

这样代码会更简洁,减少了许多冗余代码。

Reply all
Reply to author
Forward
0 new messages